#!/usr/bin/perl
use Modern::Perl;
while (<>)
{ chomp;
say reverse;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,但当我将第二行更改为时,say scalar reverse;
它工作正常.为什么我需要强制它明确地成为标量?不能Perl DWIM?
如果我理解文档正确,reverse
通常在列表上运行.在不带参数的列表上下文中,它返回一个空列表,默认情况下不会将其分配到任何位置.在你的例子中,说输出不变$_
;
强制reverse
进入标量上下文会更改其行为并使其成为反向字符串,并$_
在默认情况下使用.因为say
可以用于打印列表和标量,所以它不会强制它的参数进入标量上下文.
Perl可能做DWIM,只是给定值"I".
在以下情况下反转的细分:
#!/usr/bin/env perl
use strict;
use v5.12;
my $inscalar = "foo bar";
# `reverse` is in list context, $in is coerced to a single-element list
my @outlist = reverse $inscalar;
# `reverse` is in scalar context, so it reverses strings
my $outscalar = reverse $inscalar;
say join(" | ", @outlist); # prints "foo bar"
say $outscalar; # prints "rab oof"
# the "normal" behaviour of `reverse`
my @inlist = qw(foo bar);
@outlist = reverse @inlist;
say join(" | ", @outlist); # prints "bar | foo"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
205 次 |
最近记录: |