首页 > 解决方案 > 如何确定变量在 perl 中是存储为数字还是字符串?

问题描述

在下面的代码中,我们看到 Dumper 可以判断一个字符串变量(一个 ref 值为空字符串的变量)当前是存储为数字还是字符串。有没有比使用 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. 正如我们在如何在 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真的不可能回答这个问题吗?

标签: stringperlnumericpeek

解决方案


推荐阅读