如何确定变量在 perl 中是存储为数字还是字符串?

在下面的代码中,我们看到 Dumper 可以判断一个字符串变量(引用值为空字符串的变量) 当前存储为数字或字符串。有没有比使用 Dumper 更简单的方法来回答这个关于变量的问题? 如果可以更直接地访问这个魔法,字符串变量包含回答这个问题的 perl 魔法,我是否正确?

#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper qw(Dumper);
my $var;
$var=55;
print ref $var; print Dumper $var;
$var='55';
print ref $var; print Dumper $var;

输出:

$VAR1 = 55;
$VAR1 = '55';

我想了解这一点的一些原因:

  1. 我构建了 HASHes 和/或 ARRAYs,其中哈希值或数组元素是四位数的年份。这些数字来自各种来源,有时来自正则表达式替换,有时来自命令行,因此它们显示为数字和字符串。但是当我使用 Dumper 显示它们时,我希望它们全部对齐。

  2. 我很好奇,这也是我最初编写代码的最终原因。

  3. 有人说 == 是比 eq 更有效的检查,我想确切地知道我正在实施什么样的检查。

  4. 有一种巧妙的方法可以将看起来像数字的字符串强制存储为数字,如我们在 How can I convert a string to a number in Perl? 中看到的。请参阅@Håkon Hægland 的评论。但我想检查窥视一个变量,根本不改变它。因为我想在抛出警告或错误之前尽可能清楚地了解我的代码在做什么。

  5. 正如@Håkon Hægland 所指出的,有一个 meta::cpan 模块可以在安装后工作。但它不是我的 perl: This is perl 5,version 18,subversion 4 (v5.18.4) built for darwin-thread-multi-2level 的标准,我想编写不需要在系统级别增强的代码。我希望我的脚本能够在我最终将我的文件 rsync 到的任何新的 macbook pro 或 linux 机器上运行。我尝试 use Scalar::Type qw(is_*); 抛出 Can't locate Scalar/Type.pm in @INC (you may need to install the Scalar::Type module)。难道真的不能用“开箱即用”的 perl 来回答这个问题吗?

whyzywj 回答:如何确定变量在 perl 中是存储为数字还是字符串?

感谢@Polar Bear,他发布了 How to tell apart numeric scalars and string scalars in Perl?, 答案似乎是“不。没有办法使用开箱即用的 perl 来确定变量是存储为数字还是字符串。”

本文链接:https://www.f2er.com/1091.html

大家都在问