perlで、@をatなど別の文字列に変換したいのですが、s/¥@/at/g;とすると、漢字の2バイト目(例えば、全角空白の2バイト目)も変換されてしまいます。(漢字コードはShift JIS)1バイト文字の'@'のみを置換する方法を探しています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/01/12 20:16:39
  • 終了:2009/01/12 23:44:17

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/01/12 21:58:59

ポイント143pt

use Encode を使い、シフトJISコードをいったん内部形式に変換してから置換します。

use Encode;

my $str = "A @ BCD";
my $pat = "\@";
my $rep = "at";

#内部形式に変換
$str  = decode("Shift-JIS", $str);
$pat  = decode("Shift-JIS", $pat);
$rep  = decode("Shift-JIS", $rep);

#置換
$str =~ s/$pat/$rep/g;

#シフトJISに戻す
$str = encode("Shift-JIS", $str);
id:dayofgreen

ありがとうございます!解決しました。

2009/01/12 23:43:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません