gpt4 book ai didi

perl - Chop map 的所有键(使用更少的代码)

转载 作者:行者123 更新时间:2023-12-01 06:23:50 26 4
gpt4 key购买 nike

我正在尝试做类似的事情

my %my_map = map { chomp($_) => 1 } @my_arr;

这不符合我的预期,所以我需要:

my @chomped_arr = @my_arr;
chomp @chomped_arr;
my %my_map = map { $_ => 1 } @chomped_arr;

什么是更短的方法?

最佳答案

这里的陷阱是 chomp 修改变量,但不返回它。所以它在 map 中不起作用。

我喜欢的解决方法是使用 r 正则表达式修饰符 -

my %my_map = map { s|\n||gr => 1 } @my_arr;

它返回修改后的结果,但没有改变原始结果(这会改变 @arr)。

请注意 - 上面的内容并不十分令人费解 - 它删除了所有换行符。 (当然,您可以在正则表达式中插入一个 $。例如 s|\n$||r )

r 正则表达式标志是一个较新的功能(不是那个新功能)。不记得 OTOH 它是在哪个版本的 perl 中引入的。

也可以用文件句柄输入来做到这一点:

my %stuff = map { s|\n||gr => 1 } <$fh>;

不过严格来说,chomp 会从行尾删除 $/,因此您可能需要

s|\Q$/\E\z||r

我认为它严格重现了 chomp - 但这可能是可读性的权衡。

关于perl - Chop map 的所有键(使用更少的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306999/

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