質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

3回答

1842閲覧

Perlの記号処理の順番について

tiiiiidi

総合スコア13

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

2クリップ

投稿2014/07/01 02:39

Perlでテキスト処理を行っています。

中点を置換する処理を実行するときに、改行の処理も同時に行わないと、
うまくテキストを処理出来ません。

私としては、記号処理の時に付随してテキスト処理を行う必要があるのだろうと考えているのですが、色々調べても答えが分かりません。

こちら、理由が分かる方いらっしゃいましたら、教えていただけると助かります。

コードは以下のとおりです。

`
use encoding "cp932";

while (<>){
s/\n//g; #これを入れないと、バグが発生します。
s/・//g;

print "$_";

}
`

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

utf8プラグマを使用してますか?
これとEncodeモジュールを併用するとうまくいきます。
置換したい文字は、コード内ではデコードされてない状態の扱い(Wide character in print at...)となるので、ダイヤモンド演算子で読み込んだ文字列もデコードされてない状態に合わせないといけません。
そのため、まずはデコードし、次にエンコードをすれば、何もエラーをはかずに出力されると思います。

lang

1use strict; 2use warnings; 3use utf8; 4use Encode qw/encode_utf8 decode_utf8/; 5 6while(<>){ 7 my $text = decode_utf8 $_; # デコードされてない状態に合わせるため、デコードする 8 $text =~ s/・//g; # 同じ状態にいるため、置換が可能。 9 10 # そのままの状態だと Wide character in print at になるので、 11 12 print encode_utf8 $text; # ここでエンコードする。 13} 14

投稿2014/09/27 03:06

CodeHex

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

おそらくですが、Windowsの場合は改行コードが\r\nなのですが、出力するときに自動変換される為に\nが\r\nに変換されるので、うまく行かないのではないかと思います。

投稿2014/07/21 08:31

h_sakurai

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現中の文字コードが影響していると思われます。
正規表現の特殊な文字に該当するコードが含まれているのではないでしょうか。

ソースコードをUTF-8以外にすると文字列リテラルが問題を起こすことがよくあります。
正規表現でマルチバイト文字を判定したい場合は、\xなどで文字コードベースで記述したほうがいいかと思います。

投稿2014/09/25 04:43

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問