3

バックグラウンド:

私は、個人使用のためのいくつかのモジュールを含むディストリビューションを作成したいと考えています — それは決して日の目を見ることはありません (別名 CPAN)。Module::Starter簡単なテストとバージョン管理を活用するために、これらのモジュールを使用して開始したいと思います。

(Ubuntu GNU/Linux では perl 5.12.4)

質問:

Module::Starter で Unicode ファイル名を使用するにはどうすればよいですか? 例: Local::Λ← (Lambda)?

これは機能しません:

$ module-starter --module Local::Λ
Invalid module name: Local::Λ at /usr/local/share/perl/5.12.4/Module/Starter/App.pm line 132.

実際に失敗する行は

croak "Invalid module name: $_" unless /\A[a-z_]\w*(?:::[\w]+)*\Z/i;

Module::Starter::Simple95行目)。

ラムダは明らかに「単語」文字です。

ちなみに、これは機能します:

$ cat > xΛ.pm
use utf8;
package xΛ;
sub foo { print "42\n" }
1;
^D
$ perl -Mutf8 -MxΛ -e 'xΛ::foo()'
42
$ 

まだ試していないこと:

  • perl 5.16 のコンパイルに 1 日を費やして、Unicode の良さをさらに高めました。
  • ソースをハッキングし、ユニコードにリモートで接続されているものをすべて有効にします。
  • これが単なるディストリビューション名の制限ではないことを確認します(CPAN はこれを決して見ないので、私は気にしません)。
  • これが問題になる可能性があるかどうかを確認しGetopt::Longます。
4

1 に答える 1

3

「単語文字」の定義は次のように変わります: a) perl のバージョン。b) 問題のスクリプトが入力をバイナリ文字列または文字列として使用している場合。 perl の正規表現エンジンの最近のバージョンの/a&フラグをチェックしてください。/u

参考までに: Perl 関係者はクロスプラットフォームの互換性を求めており、さまざまなファイルシステムで Unicode のサポートが大きく異なるため、現時点では Unicode モジュール名をサポートしないことにしました。


Amon のコメントからの解決策: これでうまくいきました:

perl -Mutf8 -M5.012 -MModule::Starter::App -E'$ARGV[1]="Local::\x{039B}";Module::Starter::App->run' -- --module Local::Λ --license gpl3 --ignore git

( perlre\x{...}によると、エスケープを使用すると Unicode が強制されます)。

于 2013-02-01T17:19:16.990 に答える