小编pkr*_*171的帖子

Perl - 意外行为:如果迭代器 $r 通过正则表达式更改,则迭代数组“foreach $r (@a)” - 数组元素本身已更改

sub summs_by_key {
    foreach my $R (@CURR_RECS) {    
        if ($combine) {
            print __LINE__ . ") ... $R" ; 
            $R =~ s/\^/\|/  for 1 .. $KEY_POS ; # the regex expression
            print __LINE__ . ") ___ $R" ; 
        }
        #... etc 
    }
    #... etc // no other reassingments of $R 
}
Run Code Online (Sandbox Code Playgroud)

注意: @CURR_RECS 是一个声明为的全局数组,our @CURR_RECS ; 它在单独的子/函数中填充。正则表达式的更改实际上可以更改数组值。该函数被调用多次,在后续调用中,我们注意到正则表达式的更改已作用于数组的元素。

我的问题是这是正常行为还是 Perl 错误 - 它仅在正则表达式行执行 2 次而不是一次时发生(即 $KEY_POS = 2)

我通过不直接使用迭代器而是使用它的“副本”来解决这个问题。我将迭代器重命名为 $Rs 并将其分配给 $R。

foreach my $Rs (@CURR_RECS) {
        my $R = $Rs …
Run Code Online (Sandbox Code Playgroud)

regex perl

2
推荐指数
1
解决办法
81
查看次数

Perl - 哈希的哈希 - 是使用“eval”访问可变长度键序列的唯一选项吗?{k[0]}=>{k[1]}=>

我将保持我的问题的高度,因为这就是我,这就是我的风格,这就是我需要回答的问题。

我有一个多级哈希可以使用(哈希的哈希)。我还有一些算法可以为我提供 @key 中的一系列键(用于查找各种值)。

我获取个人价值观的技巧是:

只需构建一个如下所示的表达式

 $h-> {$key[0] }=> {$key[1]} => ... e.t.c.
Run Code Online (Sandbox Code Playgroud)

然后“评估”该表达式。

是否有更好的技术来处理可变按键序列而不需要 eval?

(哈希是目录结构的镜像。值是单个文件,我的程序需要读取这些文件的内容。)

我尝试过,它适用于 eval 选项。

perl hash-of-hashes

1
推荐指数
1
解决办法
115
查看次数

标签 统计

perl ×2

hash-of-hashes ×1

regex ×1