微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 强制成为标量

#!/usr/bin/perl
use Modern::Perl;
while (<>)
{ chomp;
say reverse;  
}

上面的代码不起作用,但是当我改变第二行时说标量反转;然后它工作正常.为什么我需要强制它明确地成为标量?不能Perl DWIM?

解决方法

如果我理解文档正确,则反向通常在列表上运行.在不带参数的列表上下文中,它返回一个空列表,认情况下不会将其分配到任何位置.在你的例子中,说输出不变的$_;

强制反向进入标量上下文会改变其行为并使其成为反向字符串,并认使用$_.因为可以用来打印列表和标量,所以它不会强制它的参数进入标量上下文.

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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐