gpt4 book ai didi

perl - 为散列中的 * 字符赋值

转载 作者:行者123 更新时间:2023-12-01 12:30:01 32 4
gpt4 key购买 nike

使用以下代码部分,我通常会拆分一个混合字符串整数字段(例如 45A34C),并根据存储在 %r 中的一组规则计算每个字母的实例(由其前面的整数指定)。这很好用。

use strict;
use warnings;

my @F; $F[5] = '*';
my @ar = split(/([ABCD])/, $F[5]);
my %r = (A => 1, B => 1, C => 0, D => 1, '*' => 0);
my $s = 0;
my $op;
my $n;
$s += $n * $r{$op} while ($n,$op) = splice @ar,0,4;

但是,在某些情况下,$F[5] 只包含一个星号 - 一个文字 * 字符。包含此内容的任何行都会返回这些警告:

Use of uninitialized value $op in hash element at b.pl line 10.
Use of uninitialized value in multiplication (*) at b.pl line 10.
Argument "*" isn't numeric in multiplication (*) at b.pl line 10.

鉴于 * 未分配编号,这是预期的。我试图在散列中为字符分配一个数字,但无法找出正确的语法。我试过:

my %r = (A => 1,B => 1,C => 0,D => 1, * => 0);
my %r = (A => 1,B => 1,C => 0,D => 1, \* => 0);

但警告仍然存在。为特殊字符赋值的正确方法是什么?为什么 * 不能像 'A' 那样处理?

最佳答案

my %r = (A => 1, B => 1, C => 0, D => 1, '*' => 0);

=> 当它是标识符时“自动引用”它的 LHS,但它不一定是标识符;它可以是任何表达式。 (事实上​​,您甚至不需要使用 =>,它只是一个花哨的逗号 (,)。)


但这并不能解决您的问题。 @ar只包含*,所以$n*$op是不明确的。 @ar 需要至少两个值才能使该代码正常工作。因此,让我们明确地寻找有意义的值。

my %r = (A => 1, B => 1, C => 0, D => 1 );

my $s = 0;
while ($F[5] =~ /(\d+)([ABCD])/g) {
my $n = $1;
my $op = $2;
$s += $n * $r{$op};
}

顺便说一下,

* => 0*=> 0 的奇怪写法,意思是“是 glob *= 在数值上大于零".

\* => 0\*=> 0的奇怪写法,意思是“是glob的地址*= 数值上大于零”。

关于perl - 为散列中的 * 字符赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152921/

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