Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 给我一个';s和0';s_Perl - Fatal编程技术网

Perl 给我一个';s和0';s

Perl 给我一个';s和0';s,perl,Perl,我有两段代码。第一个是我想要的。但是为什么第二个给了我1分和0分(我的英语正确吗,或者是“1分和0分”)而不是“约翰克里斯曼迪”呢 foreach(@data){ 印刷品; } //输出 厕所 克里斯 曼迪 foreach(@data){ 印痕咀嚼; } //输出 110 更新:: 谢谢你们,我现在更明白了。 但我不明白文件的最后一部分 => 实际上,您可以选择任何左值,包括赋值: chomp($cwd=pwd) 这是因为您正在打印chomp函数的返回值,这是从其所有参数中删除的字符总数

我有两段代码。第一个是我想要的。但是为什么第二个给了我1分和0分(我的英语正确吗,或者是“1分和0分”)而不是“约翰克里斯曼迪”呢


foreach(@data){
印刷品;
}
//输出
厕所
克里斯
曼迪


foreach(@data){
印痕咀嚼;
}
//输出
110

更新:: 谢谢你们,我现在更明白了。
但我不明白文件的最后一部分

=> 实际上,您可以选择任何左值,包括赋值:
chomp($cwd=pwd

这是因为您正在打印
chomp
函数的返回值,这是从其所有参数中删除的字符总数

返回删除的字符总数

因此,它会打印已删除的
\n
数量

按以下方式进行:

foreach  (@data) {
    chomp($_);
    print $_;
}
这是一种行为:“它返回从其所有参数中删除的字符总数。”

请注意,
$\uu
被别名为
@data
的元素,因此
@data
也被修改。如果你不想发生这种事

for (@data) {
   my $item = $_;
   chomp($item);
   print "$item\n";
}

关于文档的最后一行:

my$item=$\
返回
$item
作为左值(适合赋值左侧的值)。因此,

my $item = $_;
chomp($item);
可以写成

chomp( my $item = $_ );

正如其他人所说,chomp返回删除的字符数。在我的特定实例中(在一行perl replace In file语句中带有eval修饰符的regex),我需要在单个语句中获得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;
这将返回:

我有256个
在我的日志中提交
太好了,我需要吃这个,所以我试着:

$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp `git log | grep -i '^commit' | wc -l`/e;
print $in;
但这带来了一个错误:

无法修改chomp at./script第4行“`git log | grep-i'^commit'| wc-l`”附近的引用执行(``,qx)
由于编译错误,已中止执行./script。
是的,所以我需要将输出分配给一个本地变量,并将其选中:

$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返回了被剥去的角色:

我的日志中有1次提交
然后我发现我可以将它包装在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;
最后,我在一条语句中得到命令结果chomped:

我的日志中有256次提交

chompreturns告诉你什么了?@Wooble你的答案正确!我不明白文件的最后部分。=>实际上,您可以选择任何左值,包括赋值:chomp($cwd=
pwd
)@airnet,为我的回答添加了解释。
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp `git log | grep -i '^commit' | wc -l`/e;
print $in;
$in = "I have COMMITS commits in my log";
$in =~ s/COMMITS/chomp (my $VAR = `git log | grep -i '^commit' | wc -l`)/e;
print $in;
$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;