#perl
#perl
Вопрос:
Я ищу решение для приведенного ниже случая.
Мне нужно прочитать task.txt файл из моего скрипта Perl disconnect.pl и мне нужно сохранить содержимое файла в переменную, которую я могу использовать в нескольких местах в моем скрипте Perl.
Task.txt файл содержит слова в одинарных кавычках, разделенных запятой, но в одной строке, как показано ниже
‘qbc’, ‘456’, ‘sdf’, ‘fgh’
#########################
my $filename = 'testing_folder/text_document.txt';
open(FH, '<', $filename) or die $!;
while(<FH>){
$content=$_
}
print "$content"
my $ql = "select in ($content)";
print "$ql"
###############################
Выдает ошибку в строке my $ql
Комментарии:
1. Просто загуглите «руководство по файлам perl», за которым следует «руководство по разделению perl».
2. Попробовал .. закончилось с ошибками
Ответ №1:
Я поместил ваш код в файл с именем «line» и попытался его запустить. Вот что произошло:
$ perl line
syntax error at line line 8, near "my "
Execution of line aborted due to compilation errors.
Как вы говорите, строка 8 — это эта строка:
my $ql = "select in ($content)";
Но вот маленький секрет о сообщениях об ошибках компилятора — они не так умны, как хотелось бы. И одна из распространенных проблем, которую вы увидите, заключается в том, что они часто сообщают об ошибке не в той строке. Поэтому всегда стоит проверять строку или две перед тем, где сообщается об ошибке.
В этом случае проблема заключается в предыдущей строке:
print "$content"
Вы видите это сейчас? Внимательно посмотрите на конец этой строки. Вы видите, что чего-то не хватает?
Операторы Perl разделяются точкой с запятой. Новые строки (обычно) ничего не значат для компилятора Perl. Perl рад, что вы можете распространить инструкцию на две или более строк. Поэтому, когда он натыкается на строку без точки с запятой в конце, он просто предполагает, что следующая строка является продолжением того же оператора.
Это означает, что когда вы пишете:
print "$content"
my $ql = "select in ($content)";
Perl рассматривает это как одно утверждение:
print "$content" my $ql = "select in ($content)";
И это утверждение не имеет смысла. Таким образом, компилятор выдает ошибку.
Это также объясняет, почему сообщение об ошибке является строчным. Perl сообщает об ошибке в конце проблемного оператора.
Ох. И в случае, если я не понял — вам нужна точка с запятой в конце этой строки.
Комментарии:
1. Спасибо. Исправлено. Из-за ошибки я всегда думаю, что это проблема со строкой my $ ql = «select in ($ content)»; не просматривал инструкцию print выше
2. @sravanisrinija: Я знаю, что вы знаете секреты гуру отладки, и в следующий раз вы посмотрите на предыдущую строку 🙂