什么是“字符串化”在Perl?

在为CPAN模块日期时间的文档,我发现以下几点:

一旦您设置格式化,重载字符串化方法将使用格式化。

这似乎有一些Perl的概念叫“字符串化”,我莫名其妙地错过了。 谷歌搜索并没有明确它了。 这是什么“字符串化”?

--------------解决方案-------------

“字符串化”恰好是Perl需要的值转换为字符串的任何时间。 这可能是打印出来,用另一个字符串来连接它,一个正则表达式适用于它,或者在Perl使用任何其他字符串处理函数。

say $obj;
say "object is: $obj";
if ($obj =~ /xyz/) {...}
say join ', ' => $obj, $obj2, $obj3;
if (length $obj > 10) {...}
$hash{$obj}++;
...

通常情况下,对象将字符串化的东西像Some::Package=HASH(0x467fbc)其中perl的是印刷它得天独厚放入包中,并引用的类型和地址。

一些模块选择重写此行为。 在Perl中,这与过载编译完成。 这里是字符串化时产生其总和的对象的一个​​例子:

{package Sum;
use List::Util ();

sub new {my $class = shift; bless [@_] => $class}

use overload fallback => 1,
'""' => sub {List::Util::sum @{$_[0]}};

sub add {push @{$_[0]}, @_[1 .. $#_]}
}

my $sum = Sum->new(1 .. 10);

say ref $sum; # prints 'Sum'
say $sum; # prints '55'
$sum->add(100, 1000);
say $sum; # prints '1155'

有几个其他的ifications overload允许您定义:

'bool' Boolification The value in boolean context `if ($obj) {...}`
'""' Stringification The value in string context `say $obj; length $obj`
'0+' Numification The value in numeric context `say $obj + 1;`
'qr' Regexification The value when used as a regex `if ($str =~ /$obj/)`

对象甚至可以表现为不同的类型:

'${}' Scalarification The value as a scalar ref `say $$obj`
'@{}' Arrayification The value as an array ref `say for @$obj;`
'%{}' Hashification The value as a hash ref `say for keys %$obj;`
'&{}' Codeification The value as a code ref `say $obj->(1, 2, 3);`
'*{}' Globification The value as a glob ref `say *$obj;`

当对象在一个串预期的上下文被用于被称为字符串化的方法。 该方法描述了如何表示对象为字符串。 因此,举例来说,如果你说print object;然后,因为打印期待一个字符串,它实际上传递字符串化方法的结果进行打印。

只是增加了上面的回答,打个比喻与Java ...

很多类似Object.toString()在Java中。 全方位默认存在,但在需要时可以超过缠身。

分类:perl的 时间:2015-03-15 人气:2
本文关键词: perl的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.100 (s). 10 q(s)