「実践実用Perl」サポート
「実践実用Perl」サポート掲示板
1 / 2 / 3 / 4 / 5 / 6 / 7 /
jperlユーザーのために
藤岡和夫 2006/06/20 00:14:41
jperlユーザーのために
http://homepage1.nifty.com/kazuf/jperl.html

というページを作りました。ご参考まで。

 引用しない
 編集キー
▲ page top
デスクトップCGIのセキュリティ
藤岡和夫 2006/06/07 20:56:06
読者の環境によってはセキュリティ上の問題が出る可能性もありま
すので、下記の記事を参照してください。

"[日記] デスクトップCGIのセキュリティ"
http://homepage1.nifty.com/kazuf/renewal.html#diary_1149601264

 引用しない
 編集キー
▲ page top
Re: CGIからの『<a href=〜』が機能しない
藤岡和夫 2006/06/01 22:25:53
ご苦労様です。

>>サービスとして起動せずに、コンソールアプリケー
>>ションとして動作させてみてください。
>>
>>Control Apache Server→Start Apache Console
>
>コマンドラインでApacheを起動させようとすると、
>----------------------------------------------------
>(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネッ
>トワーク アドレス、またはポートのどれか 1 つのみを使用でき
>ます。 : make_sock: could not bind to addr
>ess 0.0.0.0:80
>no listening sockets available, shutting down
>Unable to open logs
>----------------------------------------------------
>
>などと自分には理解不能なことを言って動きません。

 説明不足でした。Apacheはデフォルトでは、サービスとしてイン
ストールされていますので、サービスを停止する必要があります。

 コントロールパネル→管理ツール→サービスからApacheを探しま
す。おそらく「状態」が「開始」、「スタートアップの種類」が
「自動」になっています。ダブルクリックして、サービスの状態を
「停止」ボタンを押し、スタートアップの種類を「無効」にしま
す。もう一度サービスで使いたい場合には、元に戻せばよいだけです。

 この状態で、コンソールから起動します。

>参考リンク先についても、ご厚意には感謝しておりますが、理解
>力不足でついてゆけませんでした。
>これまでApacheで問題なかったのでできれば環境を変えたくなか
>ったのですがANHTTPDに変えてやってみます。

 それから、もう一つ思い出しました。fileスキームがWindows XP
のSP2にアップデートしてから動かなくなっています。次の記事に
新しいスクリプトを載せていますので、ご参考にしてください。こ
れがサービスの起動問題に関わるかどうかはよくわかっていませ
ん。anhttpdもサービスで起動する方法とそうしない方法と両方が
あります。

[Perl] 「実践実用Perl」講座 (]]U) - my_documents.cgi, start.cgi
http://homepage1.nifty.com/kazuf/renewal_2005_08.html#perl_1125124606

>
>ありがとうございました。一層のご活躍をお祈りします。

ありがとうございます。chunさんも引き続きがんばってください。

 引用しない
 編集キー
▲ page top
Re: CGIからの『<a href=〜』が機能しない
chun 2006/06/01 00:04:02
藤岡様

早速のご返答ありがとうございます。

>サービスとして起動せずに、コンソールアプリケー
>ションとして動作させてみてください。
>
>Control Apache Server→Start Apache Console

コマンドラインでApacheを起動させようとすると、
----------------------------------------------------
(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネッ
トワーク アドレス、またはポートのどれか 1 つのみを使用でき
ます。 : make_sock: could not bind to addr
ess 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
----------------------------------------------------

などと自分には理解不能なことを言って動きません。
参考リンク先についても、ご厚意には感謝しておりますが、理解
力不足でついてゆけませんでした。
これまでApacheで問題なかったのでできれば環境を変えたくなか
ったのですがANHTTPDに変えてやってみます。

ありがとうございました。一層のご活躍をお祈りします。

 引用しない
▲ page top
Re: CGIからの『<a href=〜』が機能しない
藤岡和夫 2006/05/31 21:40:46
>はじめまして。プログラム素人なのでタイトル通りの実用的な内
>容に感謝しつつ勉強しております。

藤岡です。ご評価大変ありがとうございます。

>統合ポータルの「マイドキュメント検索システム」等に見られる
>CGIからHREFタグを出力しリンク先ファイルを開く、とい
>う部分が動作しません。CGIの出力内容を別ファイルに保存し
>実行すると問題なく機能しリンク先ファイルが開けます。素人目
>にはCGI出力のまま(エクスプローラのアドレスウインドウに
>〜***.cgi?と表示された状態)だとリンクが機能しないように見
>えます。
>そこでCGI出力をファイルに書き出しsystem()で起動させよう
>と思い、当掲示板にある"start"を付加する等のことも含めて試行
>しましたが、なぜか動きません。
>CGI出力からのファイルリンクが機能すればいいのですが、対
>処法を教えていただけないでしょうか。よろしくお願いします。
>尚、当方の環境はXPでApacheを使用しています。

 Apacheを使う場合には、もし、Windowsでサービスとして起動さ
せているなら、サービスとして起動せずに、コンソールアプリケー
ションとして動作させてみてください。

Control Apache Server→Start Apache Console

で起動します。原因はよくわからないのですが、CGIの動作に影響
があります。

うまく動作するようなら、

C:\Documents and Settings\<USERNAME>\スタート メニュー\プロ
グラム\スタートアップ

にショートカットを置いて、Windows起動時に動作するようしてお
くと便利です。私も現在は、Apacheを使っています。

[ArrangeNote] ArrangeNoteのページにCGIからアクセスしようプロ
ジェクト
http://homepage1.nifty.com/kazuf/renewal_2005_07.html#an_1122039064

[ArrangeNote] 「実践実用Perl」講座 (]XU) - ArrangeNote編(U)
http://homepage1.nifty.com/kazuf/renewal_2005_07.html#an_1122702110

などの記事もご参考にしてください。よろしくお願いいたします。

 引用しない
 編集キー
▲ page top
CGIからの『<a href=〜』が機能しない
chun 2006/05/31 11:49:22
はじめまして。プログラム素人なのでタイトル通りの実用的な内
容に感謝しつつ勉強しております。
統合ポータルの「マイドキュメント検索システム」等に見られる
CGIからHREFタグを出力しリンク先ファイルを開く、とい
う部分が動作しません。CGIの出力内容を別ファイルに保存し
実行すると問題なく機能しリンク先ファイルが開けます。素人目
にはCGI出力のまま(エクスプローラのアドレスウインドウに
〜***.cgi?と表示された状態)だとリンクが機能しないように見
えます。
そこでCGI出力をファイルに書き出しsystem()で起動させよう
と思い、当掲示板にある"start"を付加する等のことも含めて試行
しましたが、なぜか動きません。
CGI出力からのファイルリンクが機能すればいいのですが、対
処法を教えていただけないでしょうか。よろしくお願いします。
尚、当方の環境はXPでApacheを使用しています。

 引用しない
▲ page top
Re: P.57のfavorites2.plについて
藤岡和夫 2006/05/10 20:20:36
>favorites2.plの3行目の"\\.url\$"の意味がよく分かりません。
>これは36行目の/$pat/で使われるパターンということまでは
>分かるのですが、これは例えば
>C:\Documents and Settings\Duo\Favorites\msn.co.jp.url
>の.urlでマッチさせているということで良いのでしょうか。

 その通りです。

>とりあえず最初の\は次の\をエスケープさせるものだと思うの
>ですが、そうなると.urlの.をエスケープさせる\がないように
>思えます。

 この場合、"\\.url\$"というように""で文字列を括りますと、\
によるエスケープによって、すなわち、\<文字>と書くと、<文字>
そのものになりますので、/$pattern/に代入されたときは、/\.url
$/ となります。\\とすると、\\は"文字列"のダブルクォート内で
評価されると\という文字に置き換わると考えてください。一つ\が
残っていれば、\.は"."の文字そのものを意味します。正規表現で
は、"."は文字一文字にマッチしますので、ピリオド"."のみにマッ
チするようにするためには、"\."とする必要があるわけです。

>最後の\$の意味もよく分かりません。これはエスケープ
>してるのでしょうか。

おっしゃるように、エスケープしています。この場合は、\をはず
すと次のようなエラーになります。

C:\anhttpd\cgi-bin\awakening>jperl favorites2.pl
Final $ should be \$ or $name at favorites2.pl line 3,
within string
syntax error at favorites2.pl line 3, near ", "\\.url$""
Execution of favorites2.pl aborted due to compilation errors.

 なぜかというと、$" は特殊変数で、リストセパレータなので
す。通常は半角空白が入っています。それで行末を意味する"$"そ
のものにするために\を付けてエスケープしているのです。

 説明が足りませんでしたね。申し訳ありません。実用的に動作す
るスクリプトというものはあらゆる要素を含んでいますので、説明
不足が結構あるかもしれません。なんなりとご質問ください。

 引用しない
 編集キー
▲ page top
P.57のfavorites2.plについて
Duo 2006/05/10 05:25:40
藤岡 様

先日はどうも丁寧なご説明ありがとうございました。
あれから次の項に進んだのですが、@_やサブルーチンが
よく分からず挫折し、しばらく手をつけていませんでした^^;
最近になり読み返したところ、どうしても分からないところが
一点あったので、ご指導お願いしたく、書き込みしました。

favorites2.plの3行目の"\\.url\$"の意味がよく分かりません。
これは36行目の/$pat/で使われるパターンということまでは
分かるのですが、これは例えば
C:\Documents and Settings\Duo\Favorites\msn.co.jp.url
の.urlでマッチさせているということで良いのでしょうか。
とりあえず最初の\は次の\をエスケープさせるものだと思うの
ですが、そうなると.urlの.をエスケープさせる\がないように
思えます。最後の\$の意味もよく分かりません。これはエスケープ
してるのでしょうか。何か根本的に勘違いしていることが
あるかもしれませんが、ここで数時間詰まっているのでお手数
ですが、アドバイスお願いします。

 引用しない
 編集キー
▲ page top
Re: 52ページのfavorites.plについて
藤岡和夫 2006/04/06 21:07:41
>$favoriteの中身が変わるのであれば、何故わざわざ$1に置換した
>ものを格納する必要があるのでしょうか。$1も$favoriteも同じ
>ものが格納されているんですよね?

 $1の値は後方参照をするパターンマッチをする度に変化します。
while(<FILE>){...}のループ内の、if(/^URL=(.+)$/){...}の部分
です。$favoriteに格納した値を使うのは、新しいパターンマッチ
が起こった後に使うことになるからです。そうでなければ、おっ
しゃるように$1を使っても問題ありません。

 引用しない
 編集キー
▲ page top
Re: 52ページのfavorites.plについて
Duo 2006/04/06 11:48:02
> 藤岡 様

早速のご返信ありがとうございます。


>順番を逆にすると動かなくなるのは、置換演算子で$favoriteの
>内容を書き換えているために、ファイル名が存在しないものになる
>ので、ファイルをopenできなくなるからです。

やはりそうでしたか。パターンマッチングの際の動きがよく理解
できていませんでした。$favoriteの中身は見るだけで、置換した
ものは$1に入り、$favoriteには変化がないものだと思って
いました。これで理解できました。有難うございました。
しかし、これでまた疑問が1つできたのですがよろしいでしょうか。
$favoriteの中身が変わるのであれば、何故わざわざ$1に置換した
ものを格納する必要があるのでしょうか。$1も$favoriteも同じ
ものが格納されているんですよね?


>どのようなご質問でも受け付けますので、ご遠慮なくご質問くだ
>さい。このようにサイトを設けているのは、毎日コミュニケーショ
>ンズ社の要請によるものではありませんし、基本的には関係ありま
>せん。Perlは私の趣味ですし、何かお役に立てればと考えて運営し
>ています。

ご好意に感謝します。そういっていただけると非常にありがたい
です。できるだけ自分で考えて調べてみるつもりですが、もし
また何か本書について疑問な点があればお伺いしたいと思います。

 引用しない
 編集キー
▲ page top
Re: 52ページのfavorites.plについて
藤岡和夫 2006/04/05 20:11:09
>数ページでかなり包括的に学ぶことができる仕様になっており
>満足しております。

ご評価ありがとうございます。第1章がPerlの学習としてはすべて
ということができます。これをクリアすれば、後は同じようなもの
で、モジュールやCGIの知識を吸収すると簡単に理解できるはずです。

>プログラミングにはまだ不慣れで、初歩的な質問で申し訳ない
>のですが、52ページで紹介しているfavorites.plの20行目と
>21行目に
>open(FILE, "<$favoritesdir\\$favorite");
>$favorite =~ s/^(.+)\.url$/$1/i;
>とありますが、この順番を逆にしたら結果が表示されません
>でした。
>この本でのこれまでの理解だと、この行を逆にしても動作に問題は
>ないように思えたのですが、実際は結果が表示されません。

 順番を逆にすると動かなくなるのは、置換演算子で$favoriteの
内容を書き換えているために、ファイル名が存在しないものになる
ので、ファイルをopenできなくなるからです。

 順番を逆にするためには、

($title = $favorite) =~ s/^(.+)\.url/$1/;

のようにしておけば、$favoriteは元の値を保持したままになりま
すから、問題なく、openできるようになります。そうしておいて、
後に出てくる$favoriteを$titleに書き換えれば目的が達成されます。

>このような質問はサポートの対象外かもしれませんが、もしお答え
>していただけるようであれば、よろしくお願いします。
>トラブルシューティング以外の書き込みが禁止であれば
>お手数ですが削除をお願いします。

 どのようなご質問でも受け付けますので、ご遠慮なくご質問くだ
さい。このようにサイトを設けているのは、毎日コミュニケーショ
ンズ社の要請によるものではありませんし、基本的には関係ありま
せん。Perlは私の趣味ですし、何かお役に立てればと考えて運営し
ています。

 引用しない
 編集キー
▲ page top
52ページのfavorites.plについて
Duo 2006/04/05 06:42:19
>藤岡 様

数ページでかなり包括的に学ぶことができる仕様になっており
満足しております。

プログラミングにはまだ不慣れで、初歩的な質問で申し訳ない
のですが、52ページで紹介しているfavorites.plの20行目と
21行目に
open(FILE, "<$favoritesdir\\$favorite");
$favorite =~ s/^(.+)\.url$/$1/i;
とありますが、この順番を逆にしたら結果が表示されません
でした。
この本でのこれまでの理解だと、この行を逆にしても動作に問題は
ないように思えたのですが、実際は結果が表示されません。
このような質問はサポートの対象外かもしれませんが、もしお答え
していただけるようであれば、よろしくお願いします。
トラブルシューティング以外の書き込みが禁止であれば
お手数ですが削除をお願いします。

 引用しない
 編集キー
▲ page top
Re: HTML表の出力
藤岡和夫 2006/04/03 23:27:47
>確認しました。

ご苦労様です。

Windowsにおいて、system関数がどのように挙動するかについて書
いてある本はおそらくないと思います。自分で試して、動くような
書き方をするしかありません。私も単純にhtmlファイル名を記述し
ただけでは起動できなかった経験があります。その時はやはり、
startコマンドを付加して解決したと思います。それがどのような
場合だったかは思い出せないのですが・・・実践実用Perlの238
ページのスクリプトでは、startコマンドを使っていますね。

関連付けを使わずに、アプリケーションを直接記述するのは確実な
方法ですね。もちろん、その場合は、パスの問題も意識する必要が
あります。

 引用しない
 編集キー
▲ page top
Re: HTML表の出力
masa 2006/04/03 21:45:47
確認しました。
ファイルの拡張子は、問題なく関連付けされています。
ファイル名の前にSTARTコマンドを入れる方法で起動することができ
ました。
尚、他のファイルの起動も同様の手順で起動することができました。
テキストファイルをメモ帳で開く場合は、DOSのコマンドラインから

  perl -e "system(\"start mycom.txt\")"

で開くことができます。

又は、開くアプリケーションを指定して、

  perl -e "system(\"notepad mycom.txt\")"

で開くことができます。
※アプリのパスが通っていない場合は、フルパスで





 引用しない
 編集キー
▲ page top
Re: HTML表の出力
藤岡和夫 2006/03/30 00:29:20
>実践実用Perlを読み始めて3日になります。
>他のPerl本も読みましたが、内容が他の本と違った切り口で書か
れてい
>ておもしろく読み進めています。

 藤岡です。ご評価いただき大変ありがとうございます。この本
は、私が現在どのようにjperlを使っているか、そしてここ10年以
上どのように使ってきたかのまとめのような本ですので、テキスト
処理という観点からは多少はお役に立てる実用的な本だと考えてい
ます。また、スクリプトとしては簡単でも、デスクトップのCGIと
して動かすと、Webとデスクトップを結び付けるアプリケーション
が作れることを示したという意味で、2003-2004年に書いた本とし
ては時代の先端を走っていると思っています(^^)

>ところで、スクリプトが上手く動作しなかったのでお知らせします。
>OSは、Windows Me です。
>(OSの問題でしょうか? 2000、XPだと正常に動くのでしょうか。)

 例えば、カレントディレクトリにあるabc.htmlを表示させようと
すると、

jperl -e "system(\"abc.html\");"

としますと、htmlファイルに関連付けされたWebブラウザが起動し
ます。起動できないということは、おそらく、関連付けがなされて
いないのだと思います。

 エクスプローラのツール→フォルダオプション→ファイルの種類を
たどって、拡張子"HTML"に関連付けされているアプリケーションを
調べてみてください。

 もう一つの可能性としては、abc.htmlの前に、startのコマンド
を入れると動くかもしれません(XPではいずれでも動きます)。MEが
手元にないので確かめることができませんが、よろしくお願いいた
します。次のようです。

jperl -e "system(\"start abc.html\");"

>------------------------------------------------------------
>タブ区切りレコードをHTMLの表に変換する tab2tbl.pl (42ページ)
>
>出力したHTMLファイルの起動で
>system("table.html");
>を実行すると、
>「コマンドまたはファイル名が正しくありません。」
>HTMLファイルが起動できません。
>
>以下のようにIEフルパスで指定すると起動できます。
>system('"C:\Program Files\Internet
>Explorer\IEXPLORE.EXE" "C:\Scripts\Perl\table.html"')

 引用しない
 編集キー
▲ page top
HTML表の出力
masa 2006/03/29 11:02:34
実践実用Perlを読み始めて3日になります。
他のPerl本も読みましたが、内容が他の本と違った切り口で書かれてい
ておもしろく読み進めています。

ところで、スクリプトが上手く動作しなかったのでお知らせします。
OSは、Windows Me です。
(OSの問題でしょうか? 2000、XPだと正常に動くのでしょうか。)

------------------------------------------------------------
タブ区切りレコードをHTMLの表に変換する tab2tbl.pl (42ページ)

出力したHTMLファイルの起動で
system("table.html");
を実行すると、
「コマンドまたはファイル名が正しくありません。」
HTMLファイルが起動できません。

以下のようにIEフルパスで指定すると起動できます。
system('"C:\Program Files\Internet
Explorer\IEXPLORE.EXE" "C:\Scripts\Perl\table.html"')

 引用しない
 編集キー
▲ page top
rss2html.cgi/atom2html.cgiのバージョンアップ
藤岡和夫 2006/03/05 11:34:56
毎度です。

表題の件、下記URLに置いておりますので、ご参考にしてください。

rss2html.cgi → http://homepage1.nifty.com/kazuf/htunes.html

atom2html.cgi →
http://homepage1.nifty.com/kazuf/atom2html.html 

 引用しない
 編集キー
▲ page top
Re: 中級者以上?
藤岡和夫 2006/02/07 21:31:02
>実践実用perlを購入して1ヶ月以上経ちますが、理解できません。
>専門用語、perlの構文をづらづら〜っと記述されているのです
>が、具体的にこれはなにをしているのか全く理解できず、悩んで
>居ます。これから始めようとする者にはあわないですか?。

お疲れ様です。まずは、第1章の例を最初から一つ一つ動かしてみ
ることをお勧めします。そうすれば、Perlの基本的な要素はすべて
習得できると思います。わからないことが出れば第2章を参考にし
てみてください。それでもわからなければ、ここで質問していただ
いても結構です。

>perlでやりたい事は、
>メールフォーム作成
・・・
>アクセスカウンター
・・・
>シュッピングカート
・・・
>サイト内検索
・・・
>こんな事してみたいのですが、頑張って勉強したいと思ってはい
>るのですが、もっとやさしい参考書から始めるべきでしょうか?
>また、「こうすれば勉強がはかどるぞ!」ってことありましたら
>教えてください。

 かなり具体的な目的が上げられていますね。ご存知のように私の
本にはそのような例はないので、残念ながら掲載したスクリプトを
参考にすることはできません。私の手持ちの本を見てみますと、秀
和システムから発行されている吉川剛、谷中一朝、成田政司著、
「だれでもカンタンCGI&SSIサンプル集」という本がご希望の内容
に近いスクリプトが掲載されています。ご参考にされるとよいかも
しれません。この本はネットサーフレスキュー【Web裏技】やCGI
Cellection RoomのようなCGIの専門サイトのスクリプトを収録して
います。まずはWebサイトにアクセスされてみるのもよいのではな
いでしょうか。

CGI RESCUE - ネットサーフレスキューWeb裏技
http://www.rescue.ne.jp/

CGI Collection Roomは見つからないですね。この本も1998年の出
版ですからね。

 引用しない
 編集キー
▲ page top
中級者以上?
perlアレルギー 2006/02/06 09:55:42
実践実用perlを購入して1ヶ月以上経ちますが、理解できません。
専門用語、perlの構文をづらづら〜っと記述されているのです
が、具体的にこれはなにをしているのか全く理解できず、悩んで
居ます。これから始めようとする者にはあわないですか?。
perlでやりたい事は、
メールフォーム作成
(送信の際に必須項目に不備がある箇所に対してエラー。なけれ
ば内容確認画面。良ければ送信)

アクセスカウンター
(ホームページ上では見れないアクセスカウンター。アクセス解
析でしょうか。習得したデーターを別ファイルに拾得しそのデー
ターをアクセス解析用のページ<html>に吐き出し。本人のみが閲
覧可能。自動的にセルを作成する。)

シュッピングカート
(購入手続き完了するまで、カゴに入れた物のクッキー。自動計
算。購入確認メール(双方))

サイト内検索
(例_車などの検索。金額での検索。メーカーでの検索。・・・
前例等を組み合わせての検索。)

こんな事してみたいのですが、頑張って勉強したいと思ってはい
るのですが、もっとやさしい参考書から始めるべきでしょうか?
また、「こうすれば勉強がはかどるぞ!」ってことありましたら
教えてください。

 引用しない
▲ page top
CPAN配布libnetモジュールをインストール記事へのリンク
藤岡和夫 2006/01/03 11:17:34
 過去記事を確認していますと、リンクが切れていましたので、再
度掲載いたします。

[Perl] 「実践実用Perl」講座 (]) - CPAN配布libnetモジュールを
インストールする
http://homepage1.nifty.com/kazuf/renewal_2005_06.html#perl_1118325643

 引用しない
 編集キー
▲ page top
読者の皆様へ
藤岡和夫 2006/01/03 11:03:52
 毎度お世話になります。

 「実践実用Perl」も出版後1年を経て、利用環境も変化しており
ます。詳細につきましては、本サポート掲示板の過去記事をご参照
お願いいたしますが、どのようなことが問題点になるか、少し整理
しておきましょう。

・ 既に、ご指摘をいただいておりますように、libnetモジュール
のインストール(1.3.3)については、ppmでオンラインでインストー
ルすることはできなくなっております。zipアーカイブからダウン
ロードして、オフラインでインストールする必要があります(ppmの
問題 藤岡和夫 2005/03/28 22:21:10の記事参照)。

・ Unicode::Japaneseモジュールは本書執筆時からバージョンが
上がって、0.27になっております。これは同様にしてそのままお使
いいただいても問題ないのではと考えております。

・ Jcode.pmも本書に記載したバージョンは弾氏のサイトにはなく
なり、CPANからダウンロードしてインストールする必要があります
(Re: Jcode.pmのインストール 藤岡和夫 2005/09/07 21:34:26の記
事参照、新しいバージョン2系列も使えると考えられますが、私は
未確認です。)

 インストール関係でその他は特に問題はないと考えております
が、その他、疑問点等ございましたら、どのような小さなことでも
結構ですから、ご質問いただければと思います。

 本掲示板は投稿いただくと私宛に投稿の知らせがメールで届く仕
組みになっておりますので、見落としはよほどのことがないかぎり
はありません。迅速にご返事できると思いますので、よろしくお願
いいたします。

 引用しない
 編集キー
▲ page top