perl调试器将STDIN视为调试器命令,而不是STDIN

perl调试器将STDIN视为调试器命令,而不是STDIN,perl,debugging,input,stdin,Perl,Debugging,Input,Stdin,在我的perl脚本中,我通过以下结构读取用户输入: # 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 a

在我的perl脚本中,我通过以下结构读取用户输入:

# 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", $_; 
    }
}
问题是perl调试器将其识别为调试器的命令,而不是来自STDIN的输入。我很确定这以前是有效的,我不知道我已经改变了阅读过程。
我还发现了几种伪造STDIN的方法,但不幸的是,我对它们的语法有点困惑,不知道如何使用它们。

Perl调试器将从终端获取输入。如果您正在调试的程序正在读取STDIN,并且您的程序继承了终端的STDIN,那么您将处于当前的状态

您有三种选择可以让您继续阅读


  • 从另一个源重定向STDIN:
    perl-d myprog.pl
    program\u生成有用的输入| perl-d myprog.pl

  • 利用
    从STDIN或ARGV中命名的文件读取的事实:
    perl-d myprog.pl myargv1.txt myargv2.txt

  • 请密切注意哪个程序需要输入

    在上面的示例中,您在请求输入时通过
    行执行
    s
    tep;在正在调试的程序中输入文本
    input1
    ;然后,当调试器询问如何处理第一个替换行时,您忽略调试器,希望暂停的程序当前可能正在接受更多文本


从文件而不是从键盘输入脚本。您能否更具体地说明如何执行此操作?
perl-d myprog.pl
perl-d myprog.pl myargv1.txt myargv2.txt
是最先想到的两种方法……您知道为什么会这样吗?在过去,我只是粘贴输入,因为它是有问题的,它工作,现在它没有,我不知道为什么。另外,如果perl脚本多次需要输入,该如何处理这个问题?请编辑以解决您的问题。另请注意:包含输入的文本文件可能长于一行。
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