Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 重载字符串化和utf8标志_Perl_Utf 8_Overloading_Stringification - Fatal编程技术网

Perl 重载字符串化和utf8标志

Perl 重载字符串化和utf8标志,perl,utf-8,overloading,stringification,Perl,Utf 8,Overloading,Stringification,关于重载字符串化以及它如何与utf8标志交互,有一些我不理解的地方 例如,打印以下代码: n is utf8 at ./test_stringify_utf8.pl line 46. $t->{name} is utf8 at ./test_stringify_utf8.pl line 47. t is not utf8 at ./test_stringify_utf8.pl line 48. Derviş t is utf8 at ./test_stringify_utf8.pl lin

关于重载字符串化以及它如何与utf8标志交互,有一些我不理解的地方

例如,打印以下代码:

n is utf8 at ./test_stringify_utf8.pl line 46.
$t->{name} is utf8 at ./test_stringify_utf8.pl line 47.
t is not utf8 at ./test_stringify_utf8.pl line 48.
Derviş
t is utf8 at ./test_stringify_utf8.pl line 50.
如果我删除
say$t
,最后一行输出也将是
t不是utf8

#!/usr/bin/env perl

use utf8;
use Encode qw/is_utf8/;
use strict;

use Modern::Perl '2013';

package Test;
use strict;

sub new {
    my ($class, $name) = @_;

    my $self = { name => $name };
    bless $self, $class;

    return $self;
}

BEGIN {
    my %OVERLOADS = (fallback => 1);

    $OVERLOADS{'""'} = 'to_string';

    use overload;
    overload->import(%OVERLOADS);
}

sub to_string { shift->{name} }


package main;

my $n = "Derviş";
my $t = Test->new($n);

binmode STDOUT, ":utf8";

is_utf8($n)         ? warn "n is utf8"          : warn "n is not utf8";
is_utf8($t->{name}) ? warn '$t->{name} is utf8' : warn '$t->{name} is not utf8';
is_utf8($t)         ? warn "t is utf8"          : warn "t is not utf8";
say $t;
is_utf8($t) ? warn "t is utf8" : warn "t is not utf8";

重载字符串化可以在每次调用时返回不同的字符串,因此您试图找到一个甚至还不存在的字符串的存储格式。当对对象进行字符串化时,引用的UTF8标志将更新以反映字符串化对象的UTF8

”.$t
也适用于使用
的地方,比如说$t