Re: Wild.pmとスペースいりファイル名の問題
いいじまです。
> > C:\> perl -MWild -e "print qq'@ARGV'" "C:\Program Files\*"
> > とすると、
> > (1) の環境では C:\Program Files\*
> > (2) の環境では C:./\Program Files\*
> > という出力が出ます。
> File::DosGlob のドキュメントに
> If you want
> to put in literal spaces in the glob pattern, you can escape them with
> either double quotes, or backslashes. e.g. "glob('c:/"Program
> Files"/*/*.dll')", or "glob('c:/Program\ Files/*/*.dll')". The argument
> is tokenized using "Text::ParseWords::parse_line()", so see
> Text::ParseWords for details of the quoting rules used.
>
> とあり、
> C:\>perl -MWild -e "print qq'@ARGV'" "C:\\Program\ Files\\*"
>
> としたところ、ファイル名が多数出力されました。
> (Windows 2000 & ActivePerl build 811)
あちゃあ。Wild.pm にもう一仕事必要なわけですね。
問題は Shift_JIS の第二バイトの \ ですが、これも 表\ のように書く必要が
あるようです。素の Perl なら簡単だけど、5.6 以降の Unicode サポートとか、
今更だけど jperl とか、どうしよう…
> ちなみに PERL_SRC/win32/Makefile の
> #USE_SETARGV = define
> を有効にし、VC6 でコンパイルした perl では
> C:\> perl -e "print qq'@ARGV'" "C:\Program Files\*"
> C:\Program Files\*
これは順当ですね。そのために " があるわけですから。
> C:\> perl -e "print qq'@ARGV'" "C:\\Program\ Files\\*"
> C:\\Program\ Files\\*
手元に VC がないので追試できないのですが…
C:\> perl -e "print qq'@ARGV'" "C:\\Program\ Files\\"*
ではどうですか? UNIX ではよく使われる書き方です。
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delmonta@ht.sakura.ne.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735