Perlコーディング初心者質問スレ Part 53

このエントリーをはてなブックマークに追加
498nobodyさん
何故か「ー」の置換が出来ません。
他の日本語や、逆(〜をーにする)は出来ます。何故なんでしょうか?

print "content-type: text/html\n\n";

$str = "ボール";
$out = "ー";
$in = "〜";

$str =~ s/$out/$in/;
print $str;
499nobodyさん:2006/12/25(月) 13:52:39 ID:ClYkzmks
use Foo;
use ...;
use ...;

と、複数のpmファイルをuseしたのですが、先頭行のuseだけにエラーが出ます。

Can't locate Foo.pm in @INC (@INC ...

ちゃんとFoo.pmは存在するし、他の行のuseにはエラーが出ないのですが・・・
このエラー文は、モジュールがインストールされていないという意味のほかに、なにか意味はあるのですか?
500499:2006/12/25(月) 13:58:43 ID:ClYkzmks
何度もすみません。

use Foo;
use Hoge;
use ...;
use ...;

だとFoo.pmに関して、

use Hoge;
use Foo;
use ...;
use ...;

だとHoge.pmに関してしてエラーが出ていたようです。
@INCの検索パスにそれらのファイルが含まれていないということでしょうが、ちゃんとそのディレクトリに置いてあるんです\(^o^)/オワタ
501nobodyさん:2006/12/25(月) 14:26:49 ID:???
>>498
つEUC
502nobodyさん:2006/12/25(月) 14:29:15 ID:???
use lib しなけりゃエラーが出て当然だと思いますが・・・
503499:2006/12/25(月) 14:29:36 ID:ClYkzmks
>>502
use libは宣言しています。
504499:2006/12/25(月) 14:36:15 ID:ClYkzmks
問題のファイルは以下のものです。
http://www.uploda.org/uporg630190.zip.html

(pass : 2ch)

use lib qw(./lib);
use Common::Cookie;

として使用しています。
なにかファイルに問題はありますか?
505nobodyさん:2006/12/25(月) 14:48:11 ID:???
/lib/Common/Cookie.pm にしてますか?
506499:2006/12/25(月) 14:51:36 ID:ClYkzmks
>>505
はい、呼び出し側との相対パスは./lib/Common/Cookie.pmです。
507nobodyさん:2006/12/25(月) 15:10:41 ID:???
>>498
\Q \E
508nobodyさん:2006/12/25(月) 19:38:47 ID:ClYkzmks
\r\n、\r、\nは<BR>に変換するけど、<BR>はどの改行コードに戻せばいいの?
対象のOSによって変わると思うんだけど・・・
509nobodyさん:2006/12/25(月) 19:52:10 ID:???
\x0d\x0a|\x0d|\x0a
お好きなのをどうぞ
510nobodyさん:2006/12/25(月) 19:56:04 ID:???
その「お好きなの」をどれにするかで迷ってんじゃね?
511nobodyさん:2006/12/25(月) 19:57:38 ID:ClYkzmks
はい。
プラットフォームによって改行コードを勝手に決めてくれたりは出来ないんですか?
512JAPU@坂井恋夏 ◆lVJAPUTeX. :2006/12/25(月) 20:23:02 ID:???
>>492
記号類はメタ文字 (特殊文字) になるものがあるので、よく分からなければ \Q$var\E しておくのが良いです。Shift_JISの場合、漢字の一部にメタ文字が含まれる可能性があるので、思わぬところでエラーとなります。

>>495
要件に「大文字小文字を区別するかどうか」が含まれていないため、必要に応じて i 修飾子を付けてください、という意味です。

>>498
文字コードはShift_JISを使っていますね。「ー」の2文字目は「[」であるため、バイト単位で処理する場合にはそれがメタ文字として見なされます。
ですから、以下のような方法で回避する必要があります。

1. >>501 EUC-JPを利用する。
2. >>507 \Q$out\E とする。
3. Jperlを利用する。(今となってはお勧めできない)
4. 入出力をきちんとハンドリングして、内部では常にutf-8フラグつきの文字列として扱う。(多少面倒だが漢字も1文字単位で処理できるのでお勧め。「Perl utf8」でググれば参考サイトは沢山出てきます。)
5. 先頭で use encoding "Shift_JIS"; する。(あまりお勧めできない)
他にあったっけ?

# Shift_JISでは /セーラープルート/ がエラーになるので悲しい。