我有两段代码。第一个是我想要的。为什么它是第二个给我1和0(是我的英语正确,或者它是" 1s和0s")而不是" johnchrismandy&#34 ;
foreach (@data) {
print ;
}
//output
john
chris
mandy
foreach (@data) {
print chomp ;
}
//output
110
UPDATE::
Thank you guys, I understand it more now.
But I don't understand the last part of the doc.
foreach (@data) {
print chomp ;
}
//output
110
);
答案 0 :(得分:6)
这是documented行为:"它返回从其所有参数中删除的字符总数。"你想要
for (@data) {
chomp;
print "$_\n";
}
请注意,$_
是@data
元素的别名,因此@data
也会被修改。如果你不希望这种情况发生。
for (@data) {
my $item = $_;
chomp($item);
print "$item\n";
}
关于文档的最后一行:
my $item = $_;
返回$item
作为左值(适用于作业的 l eft-hand侧的值)。因此,
my $item = $_;
chomp($item);
可以写成
chomp( my $item = $_ );
答案 1 :(得分:1)
这是因为您正在打印chomp
函数的返回值,这是从其所有参数中删除的字符总数
答案 2 :(得分:1)
答案 3 :(得分:0)
正如其他人所说,chomp返回删除的字符数。在我的特定实例中(在一行perl replace-in-file语句中使用eval修饰符的正则表达式),我需要在单个语句中获取chomped值而不需要单独的print语句。我终于找到了一个有效的解决方案 - 将chomp命令包装在if语句中。
从:
开始$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/`git log | grep -i '^commit' | wc -l`/e;
print $in;
返回:
I have 256
commits in my log
太好了,我需要选择这个,所以我试试:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp `git log | grep -i '^commit' | wc -l`/e;
print $in;
但这会引发错误:
Can't modify quoted execution (``, qx) in chomp at ./script line 4, near "`git log | grep -i '^commit' | wc -l`}"
Execution of ./script aborted due to compilation errors.
是的,所以我需要将输出分配给一个局部变量并选择它:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)/e;
print $in;
但正如我们所说,chomp返回剥离的字符数:
I have 1 commits in my log
然后我发现我可以将它包装在if语句中并让它返回结果,chomped:
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/if (chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)) { $VAR }/e;
print $in;
最后,我在一个声明中得到了命令结果:
I have 256 commits in my log