• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl:Unicodeプロパティ作れない)

Perl:Unicodeプロパティ作れない

このQ&Aのポイント
  • PerlでUnicodeの文字プロパティの作成に失敗している理由について教えてください。
  • スクリプト実行時にCan't find Unicode property definition "AsciiAlpha"というエラーメッセージが表示されます。
  • Unicodeプロパティの作成に失敗している原因について詳しく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1
TYWalker
質問者

お礼

ありがとうございます! 自作プロパティの場合IsまたはInが必要なんですね。 これ、5.12のときはIs、Inがなくてもできたようです。 ★ C:\Perl\perl>type utf8_unireg2.pl #! /bin/perl # # utf8_unireg.pl use 5.010; use strict; use warnings; use utf8; binmode STDOUT, ":encoding(shift_jis)"; my $str = "a:b:c:"; say join "|", ($str =~ /\p{AsciiAlpha}/g); sub AsciiAlpha { return <<END; 0041 005A # A-Z 0061 007A # a-z END } C:\Perl\perl>perl utf8_unireg2.pl a|b|c C:\Perl\perl>perl -v This is perl 5, version 12, subversion 1 (v5.12.1) built for MSWin32-x86-multi-thread Copyright 1987-2010, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. C:\Perl\perl> ★ ところが、5.16になってからは、(Is|In)が必要になったようです。 ★ C:\Perl\perl>perl -v This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x86-multi-thread (with 1 registered patch, see perl -V for more detail) Copyright 1987-2012, Larry Wall Binary build 1603 [296746] provided by ActiveState http://www.ActiveState.com Built Mar 13 2013 11:29:21 Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. C:\Perl\perl>type utf8_unireg2.pl #! /bin/perl # # utf8_unireg.pl use 5.010; use strict; use warnings; use utf8; binmode STDOUT, ":encoding(shift_jis)"; my $str = "a:b:c:"; say join "|", ($str =~ /\p{AsciiAlpha}/g); sub AsciiAlpha { return <<END; 0041 005A # A-Z 0061 007A # a-z END } C:\Perl\perl>perl utf8_unireg2.pl Can't find Unicode property definition "AsciiAlpha" at utf8_unireg2.pl line 13. C:\Perl\perl>type utf8_unireg2.pl #! /bin/perl # # utf8_unireg.pl use 5.010; use strict; use warnings; use utf8; binmode STDOUT, ":encoding(shift_jis)"; my $str = "a:b:c:"; say join "|", ($str =~ /\p{IsAsciiAlpha}/g); sub IsAsciiAlpha { return <<END; 0041 005A # A-Z 0061 007A # a-z END } C:\Perl\perl>perl utf8_unireg2.pl a|b|c ★ 昔動いたプログラムが動かなくなったので、Perlの仕様変更でしょうね。。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

仕様としては, 5.10 のときでも「In」または「Is」で始まることが必要だったようです. 実装としていつ「In」または「Is」を要求するようになったのかは探せていませんが.

参考URL:
http://perldoc.perl.org/5.10.0/perlunicode.html#User-Defined-Character-Properties
TYWalker
質問者

お礼

ありがとうございます! なるほどー。

すると、全ての回答が全文表示されます。

関連するQ&A