string - 如何确定变量在 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';
我想了解这一点的一些原因:
我构建
HASH
es 和/或ARRAY
s,其中哈希值或数组元素是四位数的年份。这些数字来自各种来源,有时来自正则表达式替换,有时来自命令行,因此它们显示为数字和字符串。但是当我使用 Dumper 显示它们时,我希望它们全部对齐。我很好奇,这最终是我首先编写代码的原因。
有人说这
==
是比 更有效的检查eq
,我想确切地知道我正在实施什么样的检查。正如我们在如何在 Perl 中将字符串转换为数字?. 请参阅@Håkon Hægland 的评论。但我想检查或窥视一个变量而不改变它。因为我想在引发警告或错误之前尽可能清楚地了解我的代码在做什么。
正如@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真的不可能回答这个问题吗?
解决方案
推荐阅读
- java-8 - 如何限制 Stream API 表达式返回的元素数量
- postfix-mta - 在 Postfix 中使用 sender_dependent_default_transport_maps 时是否可以同时传递?
- assembly - 为什么我不能将 #1001 移动到手臂上的 r5 中?
- javascript - 做出反应。如何实现滚动到活动列表项?
- mesibo - 可可豆荚中的 Mesibo sdk 集成问题
- reactjs - 反应:使打字稿根据另一个组件中的条件推断子类型
- android - Android - 为 textview 创建类似于电影学分的滑动动画
- javascript - 在样式化组件中使用 Textarea 可以通过在 ReactJS 中重置光标的位置来向后写入
- python - 使用日期时间的闰年代码中的问题(初学者帮助)
- agda - Agda - 以交互方式构建证明 - 如何使用孔语法?