Non-ASCII Symbol と Typeglob の奇妙な関係 [Perl]

| コメント(0) | トラックバック(0)

ツンデレ実装 の改造をしていて妙な壁にぶち当たってしまった。

use strict;
use warnings;
no strict qw/refs/;
no warnings qw/redefine/;
use utf8;

print "with Encode $Encode::VERSION\n";
print "with utf8 $utf8::VERSION\n";

package あ;
use Encode;

sub new {
  my $pkg = shift;
  *{$pkg . '::いち'} = sub { print "f1\n"; };
  *{$pkg . encode_utf8('::に')} = sub { print "f2\n"; };
  my $self = bless [], $pkg;
  *{$pkg . '::さん'} = sub { print "f3\n"; };
  *{$pkg . encode_utf8('::よん')} = sub { print "f4\n"; };
  $self;
}

sub ご {
  my $self = shift;
  my $pkg = ref $self;
  *{$pkg . encode_utf8('::ご')} = sub { print "f5\n"; };
  $self->ご;
}

package い;
our @ISA = ('あ');
use Encode;

sub f2 {
  my $self = shift;
  my $pkg = ref $self;
  *{$pkg . '::いち'} = sub { print "F1!\n"; };
  *{$pkg . encode_utf8('::に')} = sub { print "F2!\n"; };
  *{$pkg . '::ろく1'} = sub { print "F6-1!\n"; };
  *{$pkg . encode_utf8('::ろく2')} = sub { print "F6-2!\n"; };
}
sub ご { print "F5!\n"; }

package main;
use Encode;

sub check {
  eval { shift->() };
  print "-\n" if $@;
}

my $obj = あ->new;
check sub { $obj->いち };
check sub { $obj->に };
check sub { $obj->さん };
check sub { $obj->よん };
check sub { $obj->ご };

  • = sub { print "F0-1!\n"; };
  • = sub { print "F0-2!\n"; };
$obj = い->new; $obj->f2; *{"い::なな1"} = sub { print "F7-1!\n"; }; *{encode_utf8("い::なな2")} = sub { print "F7-2!\n"; }; check sub { $obj->ぜろ1 }; check sub { $obj->ぜろ2 }; check sub { $obj->いち }; check sub { $obj->に }; check sub { $obj->さん }; check sub { $obj->よん }; check sub { $obj->ご }; check sub { $obj->ろく1 }; check sub { $obj->ろく2 }; check sub { $obj->なな1 }; check sub { $obj->なな2 };

を実行すると

> perl test.pl
with Encode 2.31
with utf8 1.07
f1
-
f3
-
f5
F0-1!
F0-2!
f1
F2!
f3
-
F5!
-
F6-2!
F7-1!
F7-2!

という風に、型グロブを通してnon-ASCIIな名前を持つサブルーチンの定義を弄る場合に、encode_utf8 が必要だったり不要だったりどっちでもいけたりとまちまちな結果に。

で、perldoc utf8 したら、ちゃんと BUGSのところに One can have Unicode in identifier names, but not in package/class or subroutine names. (略) use of Unicode for the said purposes is unsupported. とあった。

そうか、未サポートだったのか。残念 (´・ω・

トラックバック(0)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/62

コメントする

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • PiXA

2011年4月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.04

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic