• 締切済み

perlの ¥033 不具合エラー

以下のスクリプトを実行すると"Unrecognized character \033 at ./tools/aaa.pl line 5."というエラーが出てしまいます。やりたいことは 文中の "//! aaa"を全て削除して出力するというものです。何が悪いのでしょうか? ----------------- #! /usr/bin/perl while(<>){ if(m#//\s*\!.*#){ $_ =~ s#//\s*\!.*\n##; print "AAA: $_\n"; }else{ print $_; } } -------------- 以上、宜しくお願い致します。

みんなの回答

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

質問にあるソースをそのままコピー&ペーストしてperl 5.001で実行したところでは、何のエラーも発生しませんでした。 お使いのperlのバージョンが新しい/古いことによる違い、ということはないでしょうか。

tk_1980024
質問者

補足

調査有難うございます。当方 This is perl, v5.6.0 built for i386-linux を用いております。\033はコード表では"!"なのですが、自分のバージョンでも確実に動作するための確実な記述法を知りたく思っています。 以上、引き続き宜しくお願いします。

関連するQ&A

  • perlなんですが、403エラーについて

    サーバーとperlはつい最近はじめた初心者です。 カテゴリーをどちらにしようか悩みましたが、いろいろを試した結果 こちらに質問することにしました。もしかしたらperlの設定かもしれません。もしも間違っていたら申し訳ございません。 サーバーの種類はCentOS Linux 5 バージョン 1.390です。 バーチャルドメインで3つのドメインを管理しています。 一応以下のように仮定させてもらいます。 AAA.com BBB.com CCC.com 末行に書いたテスト用(test.cgi)をBBB.comのディレクトリーに アップしたところ、403エラーになりました。 パーミッションエラーかなと思い、パーミッションの設定をすべて 行いましたが解決できませんでした。 実際にAAA.comでは普通に稼動しているはずなのに、おかしいな~と 思って、その同じスクリプトをBBB.comにアップしたところ、 きちんと表示されました。 そこで、AAA.comの設定をhttp.confからすべて外してBBB.comのtest.cgi を確認したところ、表示されました。 もしかしたら、複数のドメインでperlを使う場合には、 なにか設定を行う必要があるのでしょうか? バーチャルドメインで設定している内容は以下のとおりです。 ※勝手にリンクマークされるのでwww は xxx に置き換えました。 <VirtualHost ***.***.***.***> DocumentRoot /var/xxx/AAA-com ServerName AAA.com HostNameLookups off UseCanonicalName on ScriptAlias /cgi-bin/ /var/xxx/AAA-com/cgi-bin/ <Directory /var/xxx/AAA-com/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost ***.***.***.***> DocumentRoot /var/xxx/BBB-com ServerName AAA.com HostNameLookups off UseCanonicalName on ScriptAlias /cgi-bin/ /var/xxx/BBB-com/cgi-bin/ <Directory /var/xxx/BBB-com/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> テスト用のスクリプトは以下のとおりです。 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html><head><title>CGI-Perl TEST</title>\n"; print "<meta http-equiv='content-type' content='text/html; charset=shift_jis'>\n"; print "</head><body><h2>CGI-Perlテスト</h2>\n"; print "</body></html>\n"; exit;

  • perl 初めてのプログラムにエラーが出ます

    hello.pl というファイルに print “hello”; と、書きました。 ターミナルに perl -cw hello.pl と、入力しました。 Unrecognized character \xE2; marked by <-- HERE after print <-- HERE near column 7 at hello.pl line 1. と、メッセージが出ました。 解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • メタ文字の取り扱い

    カレントディレクトリにディレクトリaaa, bbb, cccが在り、さらにそれぞれのディレクトリに11_2とか9_20などのような1から20までの数字を_で2個つなげたディレクトリが在ります。そのディレクトリの中のファイル名を出力する以下のスクリプトgetname.plを作成したのですが、 Unrecognized escape \d passed through at ./getname.pl line 9. Unrecognized escape \d passed through at ./getname.pl line 9. というエラーが出ます。全く原因がわからないでいます。もしよろしければ解決法をご教示いただけないでしょうか。どうぞよろしくお願いします。 #!/usr/bin/perl use strict; use warnings; my @directory=qw/aaa bbb ccc/; foreach my $dname (@directory) { opendir(DIR,"./$dname/\d+_\d+"); my @dir=readdir(DIR); close(DIR); print join("\n",@dir); } print "\n";

    • ベストアンサー
    • Perl
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlの超初心者です。

    Perlの超初心者です。 mac osXを使っています。テキストエディットで、#! /usr/bin/perl print "hello world!\n";と書いてperl-test.plと保存しました。そしてターミナルを起動してperl-test.plとタイプしたのですが、-bash: perl-test.pl: No such file or directoryとなってしまいます。 試しにターミナルでperl -le "print 'hello world';"とタイプするとhello worldとかえってきました。 perl-test.plはfinderのデスクトップに保存してあります。いったいどうすればperl-test.plのファイルを実行できるのですか? 教えて下さい。よろしくお願いします。

  • perl の grepで 全角カタカナで検索できません

    perl の以下のソースで、実行エラーになってしまいます。 grep で全角カタカナで検索できないのです。半角カタカナでは、うまく動きました。 全角文字(たとえば’中華’)でも正しく「中華料理」と出力されます。 ’ラーメン’で検索したら、’ラーメン店’と出力されるのが正しいと思うのですが、 なぜ動かないんでしょ? ↓ソース #!/usr/bin/perl @aaa = ("ラーメン店","カレーハウス","中華料理"); @aaa = grep /ラーメン/ , @aaa; print "Content-type: text/html\n\n"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n"; print <<"HTML"; @aaa HTML exit;

  • Win98+PWS4.0でPERLが動作しません

    Win98+PWS4.0でPERLを動作させたいのですがうまくいきません。 ディレクトリ「Inetpub」-「scripts」へTEST.PLという名で 下記のプログラムを入れて実施すると、 --------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<p>\n"; print "Hello\n"; print "</p>\n"; print "</body>\n"; print "</html>\n"; --------------- HTTP エラー 403 403.1 許可されていません: 実行アクセスは許可されていません --------------- と出ます。 レジストリの設定は ".pl",".cgi”とも「C:\Perl\Bin\Perl.exe %s %s 」として、 PWSの設定で「scripts」は”実行””スクリプト”とも チェエク入をれています。 「wwwroot」のルートへ置いても同様のエラーが発生します。 DOS窓から「Inetpub」-「scripts」内でTEST.PLとすると 正常に表示はされます。 PerlへのパスもC:¥から実行確認済みです。 何が原因と考えられるでしょうか。 宜しくご教示お願いします。

  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • bad interpreter:エラーについて

    -bash: ./test.pl: usr/bin/perl: bad interpreter: というエラーについてです。 掲題のエラーが出てしまい、perlが動かないので困っています。 どうすればいいのか教えてもらえませんでしょうか。 【状況】 VMwareplayer3.1.2上で、CentOS5.5を動かし、デフォルトで入っているperlを使ったファイル「test.pl」を作っています。 test.plを実行しようとしているのですが、以下のエラーメッセージが表示されます。 -bash: ./test.pl: usr/bin/perl: bad interpreter: そのようなファイルやディレクトリはありません 実行した際のコマンドは./test.plです。 test.plの中身は以下。 ------------------------------------------------------ #!/usr/bin/perl use strict; use warnings; my $name = "morifuji"; print "Hello ". $name . "\n"; ------------------------------------------------------ 【確認済み事項】  test.plの置き場所は/usr/bin/perlです。  ls -lで権限をみたところ、rwxr-xr-x furukawa root 4096となっている。  perl test.plと命令するとエラーは返らずちゃんと表示されます。  (perlを省いて、test.plと命令するとエラーになる。これだと、webから表示されたときに動きません)  FTPとかで転送すると文字コードの問題でバグが出る、という風な記事を見かけたが、VMwarePlayerなのでそういったやりかたはしていない。  which perlと命令してperlの場所を探したが、 /usr/bin/ にある。

  • perlのエラー処理

    ライブラリ内部で発生したエラーをキャッチする方法がわかりません(>_<) ---------------------------------- #!/usr/bin/perl use XML::AAA; my $aaa = "bbb"; my $ccc = XML::AAA->new($aaa); ---------------------------------- こんなスクリプトを書いたとします。 XML::AAAが、newするときにXML::BBBを使っているとします。 引数が不正でXML::BBBでエラーが発生したときに どうやってそのエラーをキャッチしたらいいかわかりません。 eval{my $ccc = XML::AAA->new($aaa);} if($@){&error_handling;} とやってみても、うまくキャッチできません。 また、$aaaが正しい引数かどうかを確認するのは、ちょっと難しいので、やはり、エラーをキャッチする方向で考えたいです。 ほかにどのような方法があるか教えてください。。