在perl中,我只熟悉使用通常的
chomp(my $ip = <>);
如果这个$ ip是“以空格分隔的单词”,我必须使用split来获得“单词”,“分开”,“通过”和“空格”。
首先,有没有办法逐字阅读?
答案 0 :(得分:6)
将输入记录分隔符$/
设置为空格将逐字逐句显示。您可能会发现结果违反直觉,因此要小心您希望的。
试着举例:
perl -nwe 'BEGIN { $/ = " ";} print "Line: $_"'
它将从标准输入读取,并将其打印回给您,但当时只有一个字。但是,正如您将注意到的那样,换行(按ENTER键)仍然是该过程中不可或缺的一部分。
然而, $/
不能聪明。它只是我们用来区分输入记录的字符,它确实影响了除STDIN之外的许多其他东西,因此使用它很可能会让你感到困惑。当然,除非您在本地使用它,并且只在您想要的地方使用它。
{ # make this part lexically scoped
local $/ = " "; # use local version of $/
while (<>) {
chomp(my $ip = $_); # note that chomp removes space instead
}
} # End of scope, $/ is back to normal
答案 1 :(得分:4)
您可以将输入记录分隔符$/
更改为空格。 (我不建议这样做,读到最后)
#!/usr/bin/perl
use strict;
open(my $in, "<", "data.txt") or die "can't open input: $!";
local $/ = " ";
while(<$in>) {
chomp;
print "\'$_\'\n";
}
在这种情况下,输入由空格分隔,但不是换行符。类似地,chomp使用记录分隔符的值,因此这给你(对于多行):
所以最后,如果你有一行以上,你通常会更好地保留默认记录分隔符并将这些行分成单词。