gpt4 book ai didi

perl - 强制为标量

转载 作者:行者123 更新时间:2023-12-04 14:17:57 25 4
gpt4 key购买 nike

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

上面的代码不起作用,但是当我将倒数第二行更改为 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"

关于perl - 强制为标量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com