You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl中文件句柄文件大小计算的代码歧义及数值相加实现疑问

Perl中文件句柄文件大小计算的代码歧义及数值相加实现疑问

看起来你踩了Perl操作符优先级的小坑!先还原下你的操作和遇到的问题:

首先创建测试文件:

echo 444 > temp.txt

然后运行这段Perl代码:

perl -MData::Dumper -E "open $f, pop; print Dumper [-s $f, -s($f) +10]" temp.txt

得到的输出却是:

$VAR1 = [
          6,
          undef
        ];

问题出在哪呢?其实是Perl解析代码时的优先级误解:你以为-s($f) +10是“先获取文件句柄$f对应的文件大小,再加10”,但Perl却把它解析成了“先把文件句柄$f和10相加,再对这个结果做文件大小测试”。

文件句柄在Perl里本质是一种特殊的变量,和数值10相加后得到的是一个无意义的数字,根本不是合法的文件名或句柄,所以-s测试自然返回undef啦。

给你几个解决办法,任选其一就行:

  • 明确优先级,加括号:直接给-s $f套上括号,告诉Perl先算文件大小再加10:

    perl -MData::Dumper -E "open $f, pop; print Dumper [-s $f, (-s $f) +10]" temp.txt
    
  • 用变量存储文件大小:先把文件大小存到变量里,再做加法,可读性更好,也避免歧义:

    perl -MData::Dumper -E "open $f, pop; my $size = -s $f; print Dumper [$size, $size +10]" temp.txt
    
  • 直接用文件名测试(更简洁):其实你根本不用打开文件句柄,直接用文件名做-s测试就行:

    perl -MData::Dumper -E "my $file = pop; print Dumper [-s $file, (-s $file) +10]" temp.txt
    

这样修改后,第二个值就会变成6+10=16(对应你之前输出里的文件大小6),而不是undef了。

备注:内容来源于stack exchange,提问作者mpapec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:53:05