Сохранение строки, прочитанной из текстового файла, в переменную в скрипте Perl

#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: Я знаю, что вы знаете секреты гуру отладки, и в следующий раз вы посмотрите на предыдущую строку 🙂