В моем PERL скрипта Читает ввод данных пользователя с помощью следующей конструкции:Perl отладчик обрабатывает STDIN как отладчик команд не как STDIN
# READ INPUT IN TO THE ARRAY, LINE BY LINE AND REMOVE SLASHES /, BLANK CHARACTERS, EMPTY LINES, AND NEWLINES
while (<>) {
$_ =~ s/\\//g; # Remove slash/
$_ =~ s/^\s+|\s+$//g; # Remove heading and trailing white spaces
$_ =~ s/^\s*$//g; # Remove white spaces
$_ =~ s/\r|\n//g; # Remove CR and NL
if ($_ !~ /^\s*$/ &&
$_ !~ /:/ &&
($_ =~ /^[^=#]+=[^=#]+$/ || $_ =~ /^#+$/)){
push @raw_admin_input, split "\n", $_;
}
}
Так что, когда я запускаю сценарий, я могу вставить (или типа) мульти -line line (введите разделенную), затем нажмите Enter еще раз и нажмите ctrl+d
, чтобы сигнализировать о конце ввода пользователя, и он работает.
Теперь мне нужно отладить этот скрипт
main::(stdin.pl:177): while (<>) { # READ INPUT IN TO THE ARRAY, LINE BY LINE AND REMOVE SLASHES /, BLANK CHARACTERS, EMPTY LINES, AND NEWLINES
DB<4> s
input1
main::(skript12.pl:179): $_ =~ s/\\//g; # Remove slash/
DB<4> input2
DB<5> input3
DB<6> #############
DB<7> sdasda=asdasd
Can't modify constant item in scalar assignment at (eval 13)[/usr/share/perl5/core_perl/perl5db.pl:732] line 2, at EOF
Проблема заключается в том, что Perl отладчик распознает это как команды для отладчика, а не в качестве вклада STDIN. Я уверен, что это сработало раньше, и я не знаю, что я изменил упомянутый процесс чтения STDIN. Я также нашел, что thereare несколько способов подделать STDIN, но, к сожалению, я немного смущен их синтаксисом и не знаю, как их использовать.
Подайте свой сценарий из файла вместо клавиатуры. –
Можете ли вы уточнить, как это сделать? –
'perl -d myprog.pl
tjd