Perl 中 Scalar::Util::looks_like_number 的行为 [英] Behavior of Scalar::Util::looks_like_number in Perl
问题描述
我试图找出输入是数字还是字符串.我遇到了 looks_like_number
并且无法理解它返回的值.
I am trying to find out if an input is number or string. I came across looks_like_number
and cannot understand the values it returns.
use warnings;
use Scalar::Util qw(looks_like_number);
my $name = 11;
print looks_like_number ($name);
如果 $name
包含一个字符串和一个静态数字,如果 $name
包含一个整数(即每个整数为 4352),则此代码打印 1
).
This code prints 1
if $name
contains a string and a static number if $name
contains an integer (i.e. 4352 for each integer).
我在 Windows 上使用 Perl.
I am using Perl on Windows.
推荐答案
这就是 文档 说:
looks_like_number EXPR
looks_like_number EXPR
如果 perl 认为 EXPR 是一个数字,则返回 true.参见looks_like_number"在perlapi.
Returns true if perl thinks EXPR is a number. See "looks_like_number" in perlapi.
此引文中的 perlapi 链接 不幸的是并没有真正帮助我们很多:
The link to perlapi in this quote is not really helping us a lot unfortunately:
测试一个 SV 的内容是否看起来像一个数字(或者是一个数字).信息和 Infinity 被视为数字(因此不会发出非数字警告),即使您的 atof() 没有理解它们.Get-magic 被忽略.
Test if the content of an SV looks like a number (or is a number). Inf and Infinity are treated as numbers (so will not issue a non-numeric warning), even if your atof() doesn't grok them. Get-magic is ignored.
I32 looks_like_number(SV *const sv)
就我而言,您的代码将返回一个不是 0
的整数,这是正确的.
In my case, your code will return an integer that is not 0
, which is true.
- 我在使用
11
时得到了4352
. - 当我使用
'11'
时,我得到了1
.
- I got
4352
when I used11
. - When I used
'11'
I got1
.
所有这些都是正确的,所以行得通.
All of these are true, so that works.
- 当我输入
'test'
或'foobar'
时,我得到了0
,这不是真的. - 对于任何看起来不像数字的东西,我从来没有得到过
1
. - 我尝试了
'1e1'
并且它打印了4
,这是一个真实的值,并且输入看起来像一个科学记数法中的数字.
- When I put
'test'
or'foobar'
I got0
, which is not true. - I never got a
1
for anything that did not look like a number. - I tried
'1e1'
and it printed4
, which is a true value, and the input looked like a number in scientific notation.
所以,如果 Perl 认为输入看起来像一个数字,我会说它总是返回真值,尽管我不知道那个真值到底代表什么.我无法确认它是否也返回带有名称的 true.
So, I'd say it always returns something true if Perl thinks the input looks like a number, though I do not know what exactly that true value represents. I cannot confirm that it also returns true with a name.
这篇关于Perl 中 Scalar::Util::looks_like_number 的行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!