• ベストアンサー

Perlの壁

TaRSuの回答

  • ベストアンサー
  • TaRSu
  • ベストアンサー率66% (40/60)
回答No.1

私が初めてPerlを勉強したときにわけわかんなかったのは、正規表現と特殊変数でした。 それ以外のことは、わりあい普通の言語と同じだと思います。 正規表現って言うのは、Perlでは文字列の検索や置換をしたいときに使われる機能です。 文字列$some_stringの中の akll という部分を alll に置き換えたいときは、 $some_string = "we akll love perl"; $some_string =~ s/akll/all/g; print $some_string; # we all love perl 例えば上のような感じになります。 使えるとめちゃめちゃ便利なのですが、はじめて見たときには取っつきにくいどころではなく、まさに意味不明の言語に思えました。 オライリー社の「正規表現」を読むとこの魅力が分かります、が、初心者向きかどうかはあまり自信がありません。HTMLと文字コードくらいの前提知識は要ります。 特殊変数は、C言語などにはない、実用本位の機能です。 関数を呼び出すと自動的に内容が変化したり勝手に引数になったりするので、決まりきった手続きを書く作業を減らせるというものです。 下の例は、@arrという配列の各要素について、数字が連続するところは_NUM_という文字列に置き換えて出力しています。 foreach(@arr){ $_ ~= s/\d+/_NUM_/g; print; } これも本っ当に便利です。が、(上のように)やりすぎるとコードが読めない。 特殊変数はいずれ覚えていくので、そんなに気張って覚えようとしなくても良いと思います。 Perlの魅力は正規表現と適当な文法にこそあると思うのですが、きれいに書こうと思わないとすぐに変態的になります。 正規表現も、覚えるのは先延ばししても良いと思います。日本語が混ざっていると色々と面倒な問題が起こりますし。

wc13
質問者

お礼

正規表現難しいですね・・・。自分もつっかかっています。 お返事有り難うございます。

関連するQ&A

  • Perlの基礎中の基礎を教えてください。

    Perlのそれぞれの言語がありますが、 例えばif文はこう言うタメにあるよとか、rand関数はこういうサイトでよく使われるなど教えてください。 if文やwhile文、rand、などなど他にもありますが思いついたものを簡単な説明でも構いませんのでそれぞれのプログラムはどういう動き、なんのために使うのか、こういうサイトが使われているなど教えてください!よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlで書いた文を変更したら・・・

    動作環境Redhat9、Apache2、perl 自動でメールを送信するシステムを作成しています。訳ありでシステムを変更することになりました。Perlでかかれている文をを変更したらシステムがうまく動かなくなってしまいました。perlで書いた文は間違ないのですが・・・変更後ある作業をするということですか?どなたか教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlのpushについてです。

    お世話になります。perlのpushについてです。 データファイルを読み@XXに入れます。 実際はもうちょっと複雑なのですが、 foreach $DATA (@XX){$CHECK=''; ($A,$B)=split(/\,/$DATA); # $Bには改行コードを含んでいます。 if ($A==1){$A=2;$CHECK=1;} if ($A==2){$A=3;$CHECK=1;} if ($A==3 and $B==1){$A=1;$B=9;$CHECK=1;} if ($CHECK==1){ push(@N,"$A,$B");}else{ push(@N,"$DATA"9;} } として、@Nをファイルに出力すると1行目を除き、 行の先頭になぜか空白が付いてしまいます。 別のスクリプトで読むときに数字以外は削除というような 文を加えても削除できず、 if ( $A eq '1'){・・・・ としたときにマッチしてくれません。 よって、この最初にファイルに書き出す際に空白が付かないように したいのですが、何故付いてしまうのか?、回避方法は? ご指導頂けたら幸いです。 付いてしまいます。

    • ベストアンサー
    • Perl
  • Perlの書き方

    $addr = $ENV{'REMOTE_ADDR'}; open(IN,"$log"); my @data = <DATA>; foreach(@data){ my($ip)=split(/\,/,$_); if($ip==$addr){$a=1;} if ($a !=1) { 処理1 } else { 処理2 } } close(DATA); $logに$addrが含まれている場合は処理2を実行させたいと↑のスクリプトを書いてみました。私の環境(パソコンの環境と、設置サーバーの環境)では正常に動いているようですが、人に(パソコンの環境と、設置サーバーの環境)よっては、処理1が実行されてしまうようです。書き方は、これで間違っていませんでしょうか? もし間違っていないのでしたら、環境によって$logに$ipが記録されていないのかも知れません。perlの知識はあまりありませんが、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perl 変数 代入

    恐れ入ります。 Perlで、フォームから送信して、変数に代入したいのですがうまくいきません。 print qq!<form action="./xxx.cgi" method="get">!; opendir(DIRHANDLE, "./xxx"); foreach(readdir(DIRHANDLE)){ next if /^\.{1,2}$/; print qq! <input type="checkbox" name="$_" value="$_"> <input type="submit" value="送信"></form> とし、ディレクトリ内のフォルダ名をnameに格納してxxx.cgiへ送信します。 xxx.cgi側では、 #!/usr/bin/perl use cgi; $form = CGI->new; として、送信されたデータを次々と代入したいのですが、どのようにしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • perlのhtml部分が、ファイルとしてパソコンに読込まれてしまう。

    htmlからperlのCGIにformでデータを送信すると、表示すべきperlのhtmlの部分が、表示されず、パソコン上に読込もうとしてしまいます。どこが悪いのかおおしえください。

    • ベストアンサー
    • Perl
  • できればRuby(Perlでも)で60進数をしたい

    例 1924年=1 1925年=2 1926年=3 ・・・・ 1983年=60 1984年=1 というアルゴリズムをやりたいんです。 できればRuby、Perlでもいいです。 簡潔で綺麗なIf文を書いて下さる方はいませんか?

    • ベストアンサー
    • Ruby
  • perlの書き方

    現在、windowsでwebサーバ構築しています。iisを使用しています。 その中で、perlを使用して、送信ボタンを押すとメールを配信するものを作成しています。 $to='******@******.co.jp'; if(open(ML,"○○○○○○")){ print ML "From: $email \n"; print ML "To: $to \n"; print ML "Bcc: $bcc \n"; print ML "Content-type: text/plain;\n"; この○○には、何といれたらいいのでしょうか? また単純な質問で申しないのですが、先頭部分は、 #!C:\Perl\bin\perl.exe でいいのでしょうか?

    • ベストアンサー
    • Perl
  • perlのif文で・・・・・

    こんにちは。 お聞きしたいのですが、perlのif(A eq B)文で、crypt関数で暗号化した文字列の比較をしているのですが、画面に双方の変数をテスト表示をしてみて、AとBは一致しているにもかかわらず、このif文を飛ばしてしまいます。 暗号化した変数を使うのは初めてなんですが、何か可能性として考えられることはありますか? 自分でも考えられるチェックはしたつもりなんでが・・・

  • PerlのIF文について

    PerlのIF文の判断式につきまして、式全体を変数にしたいのですが、うまくできません。 初歩的な質問で大変恐縮ですが、他の言語を使っている人に聞いてもできるということなので、Perlでもできるような気がするのですが、うまく動かないので教えていただけませんでしょうか。 $ifbun="index(文字列, 検索したい単語) >=0"; if($ifbun){  処理 } とっても簡単な式なのですが、このままですと条件式を加味しない処理結果になっています。 $ifbunの中身をそのままIFの条件式に入れると問題なく条件式どおりの結果が得られるので、プログラムは間違っていないと思うのですが、変数に入れると、条件を加味していない結果が出てきます。 どなたかお分かりの方がいらっしゃいましたら教えてください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl