gpt4 book ai didi

perl - 如何制作默认使用 $_ 的 Perl 函数?

转载 作者:行者123 更新时间:2023-12-04 22:09:03 24 4
gpt4 key购买 nike

我有一个数组和一个修剪空格的简单函数:

my @ar=("bla ", "ha  1")
sub trim { my $a = shift; $a =~ s/\s+$//; $a}
现在,我想将它应用到一个带有 map 函数的数组。为什么我不能像使用内置函数那样只给出函数名称来做到这一点?
例如,你可以做
print map(length, @ar)
但你做不到
print map(trim, @ar)
您必须执行以下操作:
print map {trim($_)} @ar
print map(trim($_), @ar)

最佳答案

如果您使用的是 5.10 或更高版本,则可以指定 _作为prototype对于 trim .如果您使用的是早期版本,请使用 Axeman's answer :

As the last character of a prototype, or just before a semicolon, you can use _ in place of $ : if this argument is not provided, $_ will be used instead.


use strict; use warnings;

my @x = ("bla ", "ha 1");

sub trim(_) { my ($x) = @_; $x =~ s!\s+$!!; $x }

print map trim, @x;

顺便说一句,不要使用 $a$bsort 之外比较器:它们不受 strict 的影响检查。

然而,我不喜欢对我编写的函数使用原型(prototype),主要是因为它们的使用使得在精神上解析代码变得更加困难。所以,我更喜欢使用:
map trim($_), @x;

另见 perldoc perlsub :

This is all very powerful, of course, and should be used only in moderation to make the world a better place.

关于perl - 如何制作默认使用 $_ 的 Perl 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829751/

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