为什么Perl不在这里做数学?

ric*_*ick 1 arrays perl hash

我有一个哈希引用数组:

my @price = (
    {
        id    => '1',
        label => 5.00
    },
    {
        id    => '2',
        label => 7.50
    },
);
Run Code Online (Sandbox Code Playgroud)

我还有2个变量整数,$ diff和$ last.当我尝试迭代数组以将"标签"乘以$diff/$last:

foreach (@price) {
    print "(($diff/$last)*$_->{label})\t";
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

((12/30)*5.00)
((12/30)*7.50)
Run Code Online (Sandbox Code Playgroud)

我假设它没有倍增,因为我有两个整数和一个哈希引用.如果这是正确的,我如何使哈希引用成为整数?如何强制Perl实际进行数学运算并打印最终产品?

Bri*_*ach 7

它不会成倍增加,因为所有这些都在双引号内.你需要这样做:

print( (($diff/$last)*$_->{label}) . "\t" );
Run Code Online (Sandbox Code Playgroud)

你在perl上做的方式就是插入变量并打印它们的值,因为它们被包含在引号中.在*简单地视为一个字符打印.上面的数学然后.导致连接"\t"(将结果转换为字符串).

$a = 5;
$b = 6;
print "$a + $b\n";
print $a + $b . "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

5 + 6
11

  • 不要使用`$ a`和`$ b`作为var名称.您会注意到缺少`my`变量会逃避`strict`和`warnings`,因为`$ a`和`$ b`应该在`sort`块中使用 (6认同)