我正在尝试处理每个字符的文件字符输入,但有一些1显示我不知道它们来自哪里.考虑这个例子:
文件 input
First row;
Second row;
Third row;
Run Code Online (Sandbox Code Playgroud)
文件 test.pl
#!/usr/bin/perl
open FILE, "<input";
my @characters = split //, join //, <FILE>;
for( @characters ) {
print $_;
}
close FILE;
Run Code Online (Sandbox Code Playgroud)
我希望这个脚本只打印内容input(虽然以一种非常复杂的方式 - 它只是一个例子).但是,当我运行时./test.pl,我得到这个输出:
First row;
1Second row;
1
1Third row;
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:这些1角色来自哪里?
小智 14
join //应该是join ''.
//,简称$_ =~ m//,是匹配运营商.因为它匹配成功,所以它返回了真值1.
(split特别之处在于它被视为split /.../类似的东西split qr/.../.)
顺便说一句,总是使用use strict; use warnings;.它在这里很有用.
根据perldoc join:
Beware that unlike split, join doesn't take a pattern as its first argument.
在此处查看更多信息:http://perldoc.perl.org/functions/join.html
将第一个参数更改为文字空字符串""可以按预期工作:
[ben@lappy ~]$ cat test.pl
#!/usr/bin/perl
open FILE, "<input";
my @characters = split //, join "", <FILE>;
for( @characters ) {
print $_;
}
close FILE;
[ben@lappy ~]$ perl test.pl
First row;
Second row;
Third row;
Run Code Online (Sandbox Code Playgroud)