perlで「タ」の置換ができないので、対処方法教えてください。


WindowsXPにインストールしたperl, v5.8.7で、「タ」の置換を行いたいのですが、
なぜかできません。

その他の文字はできます。

ソースですが、


$line ="タチツテト";
$before = "タ";
$after = "た";

$line =~ s/$before/$after/;

print $line;

です。

ソースは、SJISで書いてます。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/09/27 20:18:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:perlcodesample No.1

回答回数4ベストアンサー獲得回数0

ポイント60pt

 正規表現ではShift-JISは正しく扱えません。

日本語を正しく扱いたい場合は、Perlが文字を扱うときの内部形式にデコード

する必要があります。

 use encoding 'sjis'; は以下のような内容を自動で行ってくれます。

#!/usr/bin/perl
use strict;
use warnings;
use Encode; # decode, encode 関数を使うため。

# ソースコードがShift-JISの場合は、文字列リテラルもShift-JISになります。
my $line ="タチツテト";
my $before = "タ";
my $after = "た";

# Shift-JISからPerlの内部形式にデコードします。
$line = decode( 'shift-jis', $line );
$before = decode( 'shift-jis', $before );
$after = decode( 'shift-jis', $after );

$line =~ s/$before/$after/;

# 出力するときは、Shift-JIS にエンコードします。
print encode( 'shift-jis', $line );

__END__
id:samasuya

詳細な回答有難うございます。


自分で使うツールなので、ここまで気にしなくてもいいかな?という

感じですが、今後の参考に大変なりました、ありがとうございます。

2008/09/27 20:17:46
  • id:b-wind
    use encoding 'sjis';
    http://www.rwds.net/kuroita/program/Perl_unicode.html#encoding
    だっけ?
  • id:samasuya
    できました!ありがとうございます。
  • id:samasuya
    折角なので、回答欄に書いていただけますか?
    質問した記録残したいんですが、キャンセル扱いになってしまいますので・・・。

    お手数お掛けしてすみませんが、よろしくお願いします。

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

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

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

回答リクエストを送信したユーザーはいません