Perl,如何在循环外从标准输入读取?

标签 perl input readfile

有些地方我不明白:

in 是一个包含以下内容的文件:

1
2
3

foo.pl:

use strict;
<>;
print;
<>;
print;
<>;
print;

然后运行:

perl foo.pl < in

为什么这个程序不输出任何东西?

...虽然这个:

use strinct;
while(<>) {
    print;
}

输出整个文件

最佳答案

因为

while(<>) 

的简写
while($_ = <>) 

这意味着该行被分配给默认变量$_print 也使用它。

你写了什么:

<>;

不给$_赋值。它只是 void 上下文中的一个 readline,这意味着该值被丢弃并且不会存储在任何地方。因此 $_ 是空的。如果您使用警告,Perl 会告诉您发生了什么。

Use of uninitialized value $_ in print

如果您手动进行分配,它将起作用:

$_ = <>;

另请注意,您不必重定向文件内容,只需提供文件名作为参数即可:

perl foo.pl in

关于Perl,如何在循环外从标准输入读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245445/

相关文章:

C - 读取文件和段错误

c++ - 遇到空格时如何停止阅读一行?

c++ - 使用 ReadFile WinAPI 读取 'Binary' 文件

linux - 如何使用单行 Perl 命令在 Linux 中将数据转换为列并创建 CSV 文件

string - 如何在 Perl 中用正斜杠替换反斜杠?

perl - 在 Perl 中解析 latex 文件

input - 使用多个输入框按 'enter'

perl - 'uninitialized value' 警告的解释

c - Scanf 在整数变量中存储错误的值

python - 如何从 while 循环中获取输入信息?