下記のソースでエラーになる。
1. # grep.pl
2. @list1=();
3. push @list1,"まぐまぐニュース";
4. push @list1,"大阪";
5. push @list1,"福岡";
6. push @list1,"名古屋";
7. push @list1,"京都";
8. @list2=();
9. push @list2,"東京";
10. push @list2,"神田";
11. push @list2,"浜松町";
12. push @list2,"名古屋";
13. push @list2,"福岡";
14. push @list2,"QTNetお客様センター";
15. for $data(@list1){
16. print grep(/^$data/,@list2),"\n";
17. }
Unmatched [ in regex; marked by <-- HERE in m/^まぐまぐニュー <-- HERE ス/ at C:\Users\usui\EDMax\DataGen5\grep.pl line 16.
windowsの環境でshift jisで書いています。
No.7ベストアンサー
- 回答日時:
3引数版のopenの使い方を覚えるといいと思います。
・ファイル名と、openモードとを明確に分けられる
・encodingや改行コード変更もできる
・いちいちbinmodeする必要がない
http://perldoc.jp/func/open
助かりました。有難う御座いました。
色んな書き方が有り、分かりにくい所でした。
記述の中でどう言う状況でこの記述をするのか。恐らく歴史的な物もあ
るかとは思いますが。とっつきにくい所でした。
No.6
- 回答日時:
>これを、shift jisで書きこむ方法は無いのでしょうか。
>下記にその時のソースを示します。3行目のopen文の指定が間違ってい
>るのでしょうか。
以下のようにしてください。
1. # grep.pl
2. use utf8;・・・・・・・・追加
3. @list1=();
3. open(OUT,">grep.txt");
4. binmode OUT, ":encoding(:cp932)";・・・・追加
No.5
- 回答日時:
#4です。
ソースの文字コードはutf-8で記述してください。
有難う御座います。
utf8で作ると正常に動きます。
これを下記の様に結果をファイルに出力するとそのファイルは、utf8で
書きこまれます。
これを、shift jisで書きこむ方法は無いのでしょうか。
下記にその時のソースを示します。3行目のopen文の指定が間違ってい
るのでしょうか。
1. # grep.pl
2. @list1=();
3. open(OUT,">grep.txt");
4. push @list1,"まぐまぐニュース";
5. push @list1,"大阪";
6. push @list1,"福岡";
7. push @list1,"名古屋";
8. push @list1,"京都";
9. @list2=();
10. push @list2,"東京";
11. push @list2,"神田";
12. push @list2,"浜松町";
13. push @list2,"名古屋";
14. push @list2,"福岡";
15. push @list2,"QTNetお客様センター";
16. for $data(@list1){
17. print OUT grep(/^$data/,@list2),"\n";
18. }
No.4
- 回答日時:
以下のようにしてください。
1行目( # grep.pl)の下へ
use utf8;
binmode STDOUT, ":encoding(:cp932)";
を追加してください。
以下実行結果です(perl 5.20.1で実行)
--------------
福岡
名古屋
--------------
No.3
- 回答日時:
Shift-JIS には通称「ダメ文字」と呼ばれる問題があります。
https://sites.google.com/site/fudist/Home/grep/s …
有名なのは「ソ」に\が含まれていて、\を特殊文字として使うもの処理系で問題になる、というものです。
Perlの正規表現や文字列には\以外にも特殊な扱いをする文字があり、
Perlで何も対策しないまま、スクリプトをShift_JISで書くと、それぞれの日本語文字は「1文字」ではなく「2バイトの文字」として扱われます。
見た目には入ってないように見えますが、Perlにとっては「ー」に [ が含まれていて、対応する] が無い、というエラーになります。
これ以外にもいろいろ注意しないと期待通りに動いてくれません。(特に、正規表現)
一度「perl Shift_JIS」とでも検索してみてください
# 例えば http://nomenclator.la.coocan.jp/perl/shiftjis.htm とか。
対策は次のものがあります。
○「ダメ文字」のダメな部分を打ち消すように記述する。
例えば、 ー なら ー[] と書くと
各文字毎に対策が違うので、一律に対応させるのが困難。
○今回のような単純な文字列一致だけの検索なら、 \Q\Eでメタ文字の無効にする。
http://perldoc.jp/docs/perl/5.14.1/perlre.pod#Qu …
○UTF-8で書き、use utf8 ; する。外部とのやりとりには、 Encodeモジュールや PerlIOによるencodingを使う
現在のPerlなら、これが無難。
○ use encodingを使う
推奨されません。
○日本語に対応したPerl (JPerlを使う)
更新はとっくの昔に終了していて、perl5.0相当までしかありません。
No.2
- 回答日時:
Perl のバージョンに依る部分もないわけではないが
・UTF-8 で書く
・encoding プラグマを適切に使う
・\Q~\E ではさむ
くらいは思い付くな.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 英文について教えて下さい。 3 2022/05/03 14:06
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- 英語 Alert Failed to get push token for push notificati 1 2023/05/05 09:21
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- 英語 できるだけ直訳で英語の翻訳をお願いします。(英語→日本語) 1 2022/10/15 20:59
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
perlプログラミング 空白行削除
-
Perlで特定文字列から特定文字...
-
ラズベリーパイ初心者です。 ラ...
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl で 64ビットint を扱うには?
-
perlのgrepで日本語の処理でエ...
-
UserGetAttributesの第7引数が...
-
HTMLのFORMで入力された文字を...
-
CGI.pm使用時の文字化けについて
-
perl 正規表現 抽出
-
シフトJISにおけるマッチング
-
全角空白での文字列分割について
-
perl 漢字コードの書き方,エン...
-
ActivePerl UTF-16の変換
-
漢字、カタカナ、ひらがな、英...
-
XPathでのワイルドカード指定
-
正規表現 \\s が、\\n に、ヒ...
-
(秀丸)正規表現で、CSV内金額へ...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
おすすめ情報