什么是Perl相当于Python的type()函数

tsh*_*ang 3 python perl

我可以用Python做到这一点:

>>> type(1)
<class 'int'>
Run Code Online (Sandbox Code Playgroud)

什么是Perl等价物?

Eri*_*rom 9

Perl并没有像Python或Ruby那样区分字符串和数字.在Perl中,运算符的使用决定了变量的解释方式.

在Python中,当你编写时1 + 2,Python会检查每个参数的类型,看到它们是数字,然后执行addition(3).如果你写'1' + '2',它会发现两者都是字符串,并执行连接('12').如果你写,1 + '2'你会得到一个类型错误.

在Perl中,当您编写时1 + 2,+运算符会在其参数上强加数字上下文.每个参数都转换为一个数字(如果参数无法干净地转换,则会发出后续警告),然后执行添加(3).如果你写'1' + '2',参数仍然转换为数字与结果3.

如果你想连接,你会使用.运算符:即使两个参数都是数字1 . 2,也会产生运算符 '12'.

因此,由于Perl的运算符强制进行类型解释,因此变量本身不需要(也不包含)类型.如果你真的需要确定哪个是哪个,你可以使用它Scalar::Utillooks_like_number函数,但通常像Perl中那样的编码表示设计问题.

Perl的标量变量可以包含以下四种内容之一:

  • 数字
  • 字符串
  • 未定义的值(undef)
  • 引用(可以是对任何基本类型或对象的引用)

ref关键字用于确定标量是否包含引用,以及该引用的类型.

ref(1)         --> ''  (a false value)
ref('string')  --> ''  (a false value)
ref([1, 2, 3]) --> 'ARRAY'
ref({a => 1})  --> 'HASH'
ref(\1)        --> 'SCALAR'
ref(\\1)       --> 'REF'
ref(sub {})    --> 'CODE'
Run Code Online (Sandbox Code Playgroud)

完整列表可以在perldoc -f ref中找到

将引用bless编入包时,该引用将成为对象.在这种情况下,ref将返回对象被祝福的包的名称.

{package My::Object;
    sub new {bless {}}
}

my $obj = My::Object->new;

ref($obj)  -->  'My::Object'
Run Code Online (Sandbox Code Playgroud)


And*_*are 6

试试ref.

  • @Tshepang vanilla Perl不使用严格的'int'或'string'类型.如果你什么也得不到,那就称为标量 (4认同)
  • @Tshepang,你必须通过引用为ref,如果它已经是工作,否则,您必须包括一个斜杠(\\)来创建一个参考基准(可能的对象).例如`ref(\ 1)`给`SCALAR` (2认同)