我想取一行包含多个相同结构的表达式,包含 4 位十六进制数字,并根据哈希表更改该结构中的数字。我尝试使用下一个和平的代码:
while ($line =~ s/14'h([0-9,a-f][0-9,a-f][0-9,a-f][0-9,a-f])/14'h$hash_point->{$1}/g){};
其中$hash_point
是指向哈希表的指针。
但它告诉我,当我尝试运行以下代码时,我尝试使用未定义的值:
while ($line =~ s/14'h([0-9,a-f][0-9,a-f][0-9,a-f][0-9,a-f])/14'h----/g){print $1," -> ",$hash_point->{$1},"\n";};
它将所有想要的数字更改为“----”,但仅打印了两次值(还有更多更改)。
问题出在哪里?
最佳答案
这是我最后使用的:
$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".$hash_point->{$1}/ge;
并且为了考虑不在我添加的哈希中的数字:
$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".((hash_point->{$1}) or ($1))/ge;
我还想知道哪些数字没有出现在哈希中:
$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".(($hash_point->{$1}) or (print "number $1 didn't change\n") &&($1))/ge;
最后,我希望能够控制是否打印前一阶段的按摩,我添加了 $flag
的使用,仅当我希望按摩时才定义它出现:
$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".(($hash_point->{$1}) or (((defined($flag)) && (print "number $1 didn't change\n")) or ($1)))/ge;
关于regex - 在perl中的一行中更改多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396582/