トップページ⇒php
1001コメント315KB

Perl コーディング初心者質問コーナー Part25

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/28 01:18ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0249nobodyさん03/07/04 22:27ID:???
>>246>>248
エラーメッセージの内容くらい見ようよ。

>>245
> glob failed (child exited with status 127) at tmp.cgi line 2.

globに失敗してる。cshが使えない環境か、cshがglobに使う
一時領域にアクセスできないのが原因だと思う。
素直にglobは諦めて

opendir(DIR, "./tmp");
unlink (grep !/^./, readdir DIR);

とかした方が良いかも知れない。
0250nobodyさん03/07/05 00:36ID:???
MLDBMを使おうとしています。

$database{"$id"} = %params;
で格納し、

foreach my $id ( keys %database ) {
print qq($id <BR>);
foreach my $key (keys %{ $database{$id} }){
print qq($key <BR>);
print qq($database{$id}{$key} <BR>);
}
}
で中身を確認しようとしていますが1個目の$idで表示が止まります。
$idは四つあり、%paramsのkeyは15個ほどあります。

foreach my $id ( keys %database ) {
print qq($id <BR>);
}
と、$idのみを全て見ようとすると三つとも表示されます。
入門 perl DBI を見て、
print Data::Dumper->Dump( [ \%database ] );
しましたが、
$VAR1 = { '2003415' => '1234 2003 game_year', '20031010' => '24/64', '20030606' => '18/32', '20030505' => '18/32' };
こんな表示です。。。。

2003415 20031010 20030606 20030505 は%databaseのkeyで、
あとは%paramsのkeyやらvalueやらの一部ですが全部じゃありません。

MLDBM初めて使うので、とりあえず格納して、それを表示させて
確かめる為のテストをしているのですが、
%{ $database{$$id} }のkeyとvalueを表示させるにはどうしたらいいのでしょうか。
025125003/07/05 00:37ID:???
>>250
> 三つとも表示されます。
は四つとも表示されます、の間違いです。
0252nobodyさん03/07/05 01:24ID:???
>>250
$database{$id} = \%params;
こうだろ?
リファレンスの基礎からやりなおしてこいよ。

0253nobodyさん03/07/05 02:00ID:???
基礎ができない(or 解らない)から、ここにカキコするんじゃねーの?
その為の初心者スレだと思うが…。流石に釣りやネタには俺はレスしないけどな
0254nobodyさん03/07/05 03:29ID:???
基礎的なことにつまずくのはしょうがないよ。
そうやって一歩ずつ覚えていけばいいんだから。ただ、

  エラーメッセージは読め。
  英文だろうがなんだろうががんばって読め。
0255nobodyさん03/07/05 03:43ID:???
そういうことだね。
英文のメッセージが読めないなら和訳のを探せばいいのに。

ttp://www.namazu.org/~tsuchiya/perl/info/perl-ja_109.html
0256252じゃないが03/07/05 12:13ID:???
コーディング上の質問は>>252で解決したわけだ。
質問の本質が「リファレンスを理解してない」という事にあるので、それを指摘するのが何故悪い?
0257nobodyさん03/07/05 17:21ID:jB+j5VLT
print <<ENDDOC;
 ・・・
ENDDOC

でENDDOCが見つからないと怒られるんですが
何か他にやらなければいけないことがあるんでしょうか?
0258nobodyさん03/07/05 17:23ID:???
>>257
ENDDOCのあとに空白がある。
print <<ENDDOC;
 ・・・
ENDDOC ←ここ
0259nobodyさん03/07/05 17:52ID:???
それはコピペの特性では
026025703/07/05 17:58ID:???
ソースでは入ってないです。
コピペしたわけでもないのですが・・謎

というかどの行も全部そういう風になってますね(^^;
026125703/07/05 18:09ID:???
わかりました!
先頭にタブ入れちゃいけないんですね。
後ろに付いちゃいけないという事は
前にも付いちゃいけないのかと思ってやってみたら。

参考書の
print <<" AAA"
の先頭の空白の意味がわかった・・・

どうもでした>258さん
0262nobodyさん03/07/06 02:53ID:???
質問です。

eval{ flock(FILE,2); };
if($@){ &MkDIR ; }

これは期待通りに動きますか?
026326203/07/06 03:01ID:t//EFERU
age 忘れでした。
0264nobodyさん03/07/06 03:59ID:???
>>262
どういう結果を期待してるのか分からんが、
とりあえずエラーは起きないだろう。
026525003/07/06 09:49ID:1R/hd8rn
>>252
アドバイスありがとうござました。
リファレンス、どうも今一理解していないようです。
何しろプログラム自体ちゃんと勉強したものじゃないもので、
どうしても書くものがフラットになりがちなのですが、ちょっと複雑なものを
strictに書こうとすると避けて通れないですよね。

本はもっぱらオライリーのものを、初めての〜とかプログラミングperlとか
CGIプログラミング、あと関係ないですけどjava scriptとか読んでますが、
なかなか奥が深いですよね。

僕としては大物で(僕にとってはですが)一から作った二つ目ですが、
アドバイスのおかげで何とかものになりそうで、ほっとしました。

クックブック欲しいなあと思ってますが、実用perl〜、は僕には難しすぎるでしょうか。
0266nobodyさん03/07/06 12:46ID:???
>>265
その前にEffective Perl読んでおいたほうがいいと思うよ。
自信をもってプログラムを書けるようになる。安いし。
0267nobodyさん03/07/06 19:04ID:AvDpfWTI
文字列を入力してweb上のテキストファイルにアクセスして検索し、
何行目にあるかを表示したいのですがうまくいきません
$name = $in{'name'};
&jcode'convert(*name,"sjis");
if(!open(OUT,"$file")){&error(err_file);}
flock(OUT,2);
@DATA = <OUT>;
flock(OUT,8);
close(OUT);
$count = @DATA;
$i = 0;
$found = -1;
while($i<$count){
($chk[$i]) = split(/\,/,$DATA[$i]);
if($chk[$i] eq $name){
$found = $i;
}
$i ++;
}
こうしたのですが該当するものを入力してテストしてみたのですが
全部 -1 になってしまうのですがどうしたらいいのでしょうか?
テキストファイルはこういう感じです。読み込みは出来ています。
データ1
データ2
データ3
・
・
・
0268nobodyさん03/07/06 19:08ID:???
>>267
($chk[$i]) = split(/\,/,$DATA[$i]);
何がしたいんだ、ここんところ。
この行について自分の言葉で自分の意図するところを明確に書きなさい。
そしたら多分、解決できるから。
0269nobodyさん03/07/06 19:11ID:???
flockするタイミングおかしくない?
027026703/07/06 19:11ID:AvDpfWTI
すみません覚えたてなので変な書き方してるかもしれません。。
$chkに$i行目のデータを$nameと比較するために読み込んで格納している
つもりなのですが・・
0271nobodyさん03/07/06 19:14ID:???
$chk[$i]をprintして、何が入っているか確認すれば原因わかりそう
027226703/07/06 19:21ID:AvDpfWTI
>>271
whileのあとにprintしてみたら表示できるのですが
whileの中でprintしたらエラーになってしまいました・・
027326703/07/06 19:25ID:AvDpfWTI
printはなんとかできました。
テキストファイルの中身が全部読み込まれて表示はされました。
でも検索結果だけが出ません・・-1のままです。
027426703/07/06 19:45ID:AvDpfWTI
$count = @DATA;
$i = 0;
$found = -1;

while($i<$count){
 ($chk[$i]) = ($DATA[$i]);
 print $chk[$i];
 if($chk[$i] eq $name){
  $found = $i;
 }
 $i ++;
}

今こんな感じですが $found の値が -1 です・・
0275nobodyさん03/07/06 19:50ID:???
while (<OUT>){
chop;
$_ eq $name and $found,last;
}
027627503/07/06 19:51ID:???
$_ eq $name and $found=$.,last;

まちがった
0277nobodyさん03/07/06 19:54ID:???
>>267
なんか、メチャクチャだな…。
ひょっとして @chk に見つかった行を格納したいのか?

 ち ゃ ん と 期 待 し た い 結 果 を 明 記 し て く だ さ い

で、俺ならこうする

# @chk にヒットした行番号を格納
# 検索対象は $name
# $[ を 0 と仮定する

$i = $j = 0;
foreach ( @DATA ) {
 if ( $_ eq $name ) {
  $chk[ $i++ ] == $j;
 }
 ++$j;
}
027826703/07/06 19:55ID:AvDpfWTI
>>275
ありがとうございます。それでやってみたのですがやはり -1 のままでした。。
0279nobodyさん03/07/06 20:00ID:???
まさか…。

/$name/
↑これで OK ってオチじゃねーだろーなぁ?

$_ eq $name は「完全に一致」ってこと解ってる? >>267
0280nobodyさん03/07/06 20:01ID:???
>>277 chop; 抜けてた
0281nobodyさん03/07/06 20:02ID:???
>テキストファイルの中身が全部読み込まれて表示はされました。
で、$nameが含まれてるものを知りたいんだろう?
$chk[$i] eq $name じゃなくて、マッチ演算子使うとか・・・

$KEKKA = $DATA[$i] =~ m/$name/;
028226703/07/06 20:08ID:AvDpfWTI
すみません。含むものじゃなく完全一致です。
$chkに一旦格納したものを$nameと比較して一致なら$foundに行数を格納というつもりでした。
277さんの方法でやってみてもだめでした・・
どこかおかしくて微妙に完全一致してないのかとも考えたのですがそうでもないような
気もしたりします。

ちょっと今から出かけますすみません・・・
0283nobodyさん03/07/06 20:16ID:???
テキストファイルの文字コードはどうなってる?
あと、$found はマッチした行数のことか?

# [廃止] @chk にヒットした行番号を格納
# 検索対象は $name で完全一致
# $found にはマッチした行数が入る。0ならマッチなし
# $[ を 0 と仮定する
&jcode'convert( *DATA, 'sjis' );
$found = 0;
foreach ( @DATA ) {
 chop ; # 行末の \n を削除
 ++$found if ( $_ eq $name ) ;
}
0284あぼーんNGNG
あぼーん
0285nobodyさん03/07/06 21:34ID:???
 print $chk[$i];
 if($chk[$i] eq $name){
を
 print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint
 if($chk[$i] eq $name){

にしてやってみろ。多分分かる。
0286nobodyさん03/07/06 21:35ID:???
失敬。
 print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint
を
 print "!$chk[$i]!=!$name!\n"; ←文字列の両端に何か文字入れてprint
に変えてくれ。
0287nobodyさん03/07/06 21:55ID:???
一旦格納するなら何も配列でやるこたぁないんじゃないのか・・・
とにかく$chk[$i]があやしいことだけは確か
0288nobodyさん03/07/07 01:00ID:???
諦めて最初から組みなおせ。
028926703/07/07 01:07ID:kYkAMaKH
今帰ってきました。今からやってみます。
029026703/07/07 01:29ID:kYkAMaKH
すみません解決しました・・
よく見たら改行が入っていました。おれの変なソースをわざわざ見ていただき
みなさんありがとうございました。

こういう風にしました
 $count = @DATA;
 $i = 0;
 $found = -1;
 while($i<$count){
  ($chk[$i]) = ($DATA[$i]);
  $chk[$i] =~ s/\n//g;
  if($chk[$i] eq $name){
   $found = $i + 1;
  }
  $i ++;
 }

かなり下手なやり方なんだろうと思いますが許してくださいごめんなさい・・
029126703/07/07 01:29ID:???
sageます・・すみません・・
0292nobodyさん03/07/07 01:31ID:???
みなのアドバイスが無駄になったということで。

↓次に質問
0293nobodyさん03/07/07 01:36ID:???
「ファイルを読んでsplit」ではよくあるトラブルではあるな>改行
0294nobodyさん03/07/07 01:38ID:???
>>292
まったくだ…。死んでくれ
0295nobodyさん03/07/07 01:40ID:???
>>267
大体、$chk って何のためのデータよ?
データをやたらコピーとかするからおかしくなったり混乱したりするんだよ。
変更しないデータならコピーして使うなよ
0296nobodyさん03/07/07 01:42ID:???
chomp使わないのか。perl4?
029726703/07/07 02:51ID:???
しにまっす(^^o)=3!
0298wakaba03/07/07 08:49ID:rYaKDTZH
GIFファイルに日本語文字列を描画したいです。

環境
FreeBSD
perl version 5.005_03
ImageMagick、GD、インストール済
ImageMagick、GDとも、基本的なコマンドが使えるのは確認済

自分的にやってみた方法
1)レンタルサーバ管理会社に
日本語TrueTypeFontのインストールを依頼。
-> ports で ja-truetypefont をインストール完了。

2)サーバを検索し、インストールされた日本語ttf は
/usr/X11R6/lib/X11/fonts/TrueType/wadalab-gothic.ttf
/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf
であろうと見当を付る。
0299wakaba03/07/07 08:50ID:rYaKDTZH
つづき

3)下記のようなスクリプトを作成、実行。
$imagemagick = Image::Magick->new;
$infile = "/hogehoge/infile.gif";
$outfile = "/hogehoge/outfile.gif";
$imagemagick->Read($infile);
$text = Jcode::convert('日本語を描画する試験','sjis');
$imagemagick->Annotate(font=>'/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf', pointsize=>18, fill=>'green', text=>$text, x=>20, y=>100 );
$image->Write($outfile);

4)結果
エラーは出ませんが、日本語が文字化けして描画されています。

別にImageMagickやGDを使わなくても良いです。
何か良い解決策をご存知の方はいらっしゃいますでしょうか?
0300nobodyさん03/07/07 09:20ID:???
シフトJISでやってるからじゃねーの?
それよりも、ImageMagick は日本語対応してるの?


300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
0301nobodyさん03/07/07 10:02ID:???
>>299
Jcodeの使い方おかしいんじゃない?
レガシースタイルでconvert使うならjcode.plと同じだよね。

スカラで受けた場合は変換した結果ではなく、変換した文字コードが
戻り値だし、第一引数がそれだと何も返ってこない。

$text = '日本語を描画する試験';
$text = jcode::convert(\$text, 'sjis');
print $text;
出力 sjis

$text = jcode::sjis( '日本語を描画する試験');
print $text;
出力 日本語を描画する試験

手元にJcode.pm入ってるのなくてjcode.plでやったんだけど。
0302wakaba03/07/07 10:25ID:rYaKDTZH
ご回答どうもありがとうございます。

>300 さんへ
ImageMagick の日本語対応の件は不明です。
レンタルサーバに問い合わせました。

>301 さんへ
$text = Jcode::convert('日本語を描画する試験','sjis');
は確かにレガシー記法ですが、当サーバでテキスト処理は出来ています。
しかし、念のためOOPで
$text = Jcode->new('日本語を描画する試験')->sjis;
のように文法を変え、
300さんの指摘通りjis、euc、utf8と確認しましたが
全て文字化けしました。
0303nobodyさん03/07/07 10:34ID:???
Jcode.pmとjcode.plが同じだと思ってる香具師が紛れ込んでるな
Jcode.pmはconvert($text, $encoding)のような書き方にも対応してるが
0304nobodyさん03/07/07 10:43ID:???
GD よく知らんけど、FreeBSD なら Ports に japanese/gd があるよ。
0305nobodyさん03/07/07 10:54ID:???
>>303
違うのはわかるけど、マニュアルに

Jcode::convert($str, [$ocode, $icode, $opt]);

jcode.pl Users: This function is 100% upper-conpatible with jcode::convert() !

こう書いてあったからjcode.plでやってみただけ
0306nobodyさん03/07/07 11:00ID:???
>>299
昔、knj2gifというCのソースを配ってる方がいらっしゃいましたが、
もう配布をやめちゃってるようです。10年くらい前の話ですが・・・。

少なくともImageMagickで日本語化に成功してる人はいるので、
何かしら設定ミスがあると思うのですが。

>>305
「Upper-Compatible」ってのは、
「jcode.plのスタイルで書いてもエラーを起こさない」
だけで、
「jcode.plのスタイルでエラーならJcode.pmのスタイルでもエラー」
って意味じゃない。

どうでもいいけど、こがいさん「compatible」の綴り間違えてるね>ドキュメント
0307nobodyさん03/07/07 12:18ID:???
  $houselist[0] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };
  $houselist[1] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };
  $houselist[2] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };


っていうリファレンスの、「EUCの文字」という部分を、
jcode.plを使って全部sjisにしたいのですが、
どのようにすればいいのでしょうか?

for ($i=0;$i<=$#houselist;$i++){
  #この部分が不明です・・・・
}
0308nobodyさん03/07/07 14:00ID:???
>>307
jcode'convert( *houselist, 'sjis' );


※基礎学習に時間をかけましょう
0309nobodyさん03/07/07 14:02ID:???
>>308
& 抜けてた。

&jcode'convert( *houselist, 'sjis' );
031030703/07/07 15:15ID:???
>>308-309
とすると、hosuelistの中身がまったくなくなってしまうのですが・・・
(&jcode::convert(*houselist, 'sjis' ); の1行をコメントアウトすると、
文字化けした状態で表示されます)

(ちなみに、HTML:Template のLOOP使って表示させてます)
0311nobodyさん03/07/07 15:21ID:???
最近勉強を始めた者なんですが疑問が出てきたので教えて下さい。

例えば(.*)は$1で取り出せる?訳ですが、
これを一度に複数扱う場合はどうすれば良いのでしょうか?
(.*)(.*)とあった場合は$1,$2って具合で良いのですか?
判り難いかもしれませんがお教え下さい。
0312wakaba03/07/07 15:35ID:rYaKDTZH
298の件で、みなさんご回答どうもありがとうございます。

>304 さんへ
レンタルサーバ管理会社に
Ports の japanese/gd で GDが日本語化するか確認してみます。
ただ、GIFを使用したいので、
現在GDはあえてversionの古いものを使用しています。
(最新版のGDはGIFが使用出来ない、とのことでしたので。)
よってGDは今回の目的で使用出来ない可能性が高いです。

>306 さんへ
Cは当方よく解らないので、当座の解決として難かしいものがあります。
ImageMagickで日本語化に成功している人がいる、とのことですので、
レンタルサーバ管理会社にImageMagickの設定を再度チェックさせる方針で
臨んでみます。

みなさんどうもありがとうございました。
また解決しましたら、顛末を記入させて頂きます。
0313nobodyさん03/07/07 15:39ID:???
>>311
それでええよ。
0314wakaba03/07/07 15:58ID:rYaKDTZH
>>307 さんへ
盲人が盲人の手を引くようで気がひけますが。。。

foreach(@houselist){
jcode::convert(\$_->{bukken} , 'sjis' );
jcode::convert(\$_->{basho} , 'sjis' );
jcode::convert(\$_->{comment}, 'sjis' );
}

これで変換されませんか?
0315nobodyさん03/07/07 15:58ID:???
>>307
ほい。
jcode::convert(\$houselist[$i]->{$_}, 'sjis') foreach (keys %{$houselist[$i]});

自分なら、ハッシュに展開する前か、表示する直前(フォーマットを整えてから)に
変換するけどね。
031630703/07/07 16:34ID:???
>>314-315
ありがとうございます。たすかります。
いちおう汎用的に、>>315さんの方法を使わせてもらいました。
0317nobodyさん03/07/07 16:39ID:???
金額でよくやるように、
12345678 を、12,345,678 に変換するにはどうすればいいのでしょうか?
0318nobodyさん03/07/07 16:41ID:???
>314
コシキタソですか?
まぁいいですが、、る
0319nobodyさん03/07/07 16:46ID:???
>>317
Perlメモ嫁
032031703/07/07 17:37ID:???
>>319
お、どうもです
0321nobodyさん03/07/07 18:41ID:???
perlメモに丸投げしたくなるほど面倒ではある
0322nobodyさん03/07/07 18:52ID:???
GDってUniCodeのみじゃなかったっけ?
0323nobodyさん03/07/07 23:41ID:C7AyQ56A
sort関数に関して、質問させていただきます。

sort {$form{$a} <=> $form{$b}} keys %form
このように定義したのですが、これでは未定義の値が数値より上に
きてしまいます。
sort {($form{$a} <=> $form{$b}) <=> ""} keys %form
こんな感じでやったりいろいろ試したのですが、どうしても数字が
上にきてくれません。

ご存知方がいらっしゃいましたら、教えてください。
宜しくお願いいたします。
0324あぼーんNGNG
あぼーん
0325 ◆hMJAPH9PWA 03/07/08 00:02ID:???
>>323
未定義値は数値に変換すると0になるからだよ。
後ろに行って欲しいならありえないくらい大きな値にすればいい。
my $infinity = 10000 ** 10000;

# 方法その1

@result = sort {
(defined($form{$a}) ? $form{$a} : $infinity)
<=> (defined($form{$b}) ? $form{$b} : $infinity) } keys %form;

# 方法その2 "シュワルツ変換"イディオムを使う。
# データが多い場合はこっちの方が速い。

@result = map{ $_->[0] }
sort{ $a->[1] <=> $b->[1] }
map{ [ $_, defined($form{$_}) ? $form{$_} : $infinity ] } keys %form;


0326nobodyさん03/07/08 00:17ID:???
@result =
sort { not defined $form{a} <=> not defined $form{b} }
sort { $form{$a} <=> $form{$b} } keys %form;
0327nobodyさん03/07/08 00:35ID:???
>>323
sort {$form{$b} <=> $form{$a}} keys %form

にしる。
0328nobodyさん03/07/08 00:40ID:???
>>325-326
うーん、どうもうまくいきません。
同じように数字が下にきてしまいます。
もう少し調べてみます。

>>327
ご返答有難うございます。
参考にさせていただきます。
0329nobodyさん03/07/08 00:42ID:d6QOcge5
スタイルシートの
<input type="submit" value="送信"style="background:#ffffff"
onmouseover="this.style.background='#000000'"
onmouseout="this.style.background='#ffffff'"> 
を、.cgi内の
<input type=submit value=\"送信\"> 
に組み込みたいのですが
どこをどう変えればいいのでしょうか?
教えてください。
0330nobodyさん03/07/08 00:44ID:???
>>329
Perlのコーディングとは全くもって関係ないので、
どっか失せてください。主にWeb製作板あたりに。
033132903/07/08 00:53ID:???
失礼しました。
逝ってきます。
0332nobodyさん03/07/08 01:05ID:???
>>328
ごめんな。動作確認してなかった。

@result =
sort { !defined $form{$a} <=> !defined $form{$b} }
sort { $form{$a} <=> $form{$b} }
keys %form;

優先度がnotよりも<=>の方が高いし…
0333nobodyさん03/07/08 01:07ID:???
あ、ソート後の順番は、元の順番が尊重されるという保証は無いか…思考中
0334nobodyさん03/07/08 02:11ID:???
>>323
´−`).oO(素直に最初に分けたらあかんの…?)
my(@defined_key, @undef_key);
defined $_ ? push @defined_key, $_ : push @undef_key, $_ for keys %form;
my @result = (sort { $form{$a} <=> $form{$b} } @defined_key), @undef_key;
033525003/07/08 02:26ID:gC7FPuyS
>>266
Effective Perl
名前は聞いたことはありましたが、改めてネットでいろいろと
レビュー見てみました。
なんか、とってもそそられる本のようで、仰るとおり
値段もそんなに高くないし、何しろあまり厚そうじゃないのが
よさそうです。
何しろperl DBIと、あとプログラミングperl第三版のどっちかの
二冊抱えて電車乗ってるんです、最近。。。。
重いんですが、つい抱えて出かけてしまうのです。

紹介、ありがとうございました。
0336nobodyさん03/07/08 02:51ID:???
>>332,334
それでやってもいきませんでした、、、
うーん、深いです、、、
考えるだけ考えてみたいと思います。
いろいろとご支援有難うございます。
0337nobodyさん03/07/08 03:21ID:???
LWP に付いて質問です

#!/usr/bin/perl

use LWP::UserAgent;

$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);

$req = HTTP::Request->new(GET => 'http://www.yahoo.co.jp/');
$req->header('Accept' => 'text/html');

# リクエストの送信
$res = $ua->request($req);

# 出力のチェック
if ($res->is_success) {
print $res->header; # ヘッダー全体を出したいっ!!
print $res->content;
}
else {
print "Error: " . $res->status_line . "\n";
}



print $res->header; のところで、レスポンスヘッダー全体を出力したいのですが、
何故か、空が返されます
0338nobodyさん03/07/08 03:38ID:???
>>337
$res->headers->as_string; …かな。

ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Response.html
ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Message.html
ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Headers.html
033926203/07/08 10:48ID:yiVOHQJT
>>262です。亀でスンマセン。
もう一度ソース貼ります。

eval{ flock(FILE,2); };
if($@){ &MkDIR ; }

$@ は直前の eval のエラーが格納されるということで
flock 関数が使えなかった場合の保険に mkdir でロックしたい。
ということなんです。
けど、エラーが出ないということは $@ には何も入らないという事になるんでしょうか?
結局はflock が使えるのか使えないのかを知りたいということなんですが判断の仕方が解らないんです。
最初から他のファイルロック方法を実現しろという話は無しの方向で。
ご意見お願いします。
0340nobodyさん03/07/08 11:11ID:???
>>339
エラーなしならヌル
って単にevalの戻り値を知りたかっただけかよ
034133903/07/08 11:31ID:???
>>340
本当に $@ にエラーが入るのだろうか?
と思いまして。はい。
flock 関数のころし方も分らないんで確認できなくって。
0342nobodyさん03/07/08 11:51ID:???
>>341
Windowsだと、9x系はエラー(かどうかは分からんが、evalらずに素で実行すると
スクリプトは停止)になるよ。
ちゃんと確認したいところだけど、うちは全部NT系にしちゃったんで。
0343nobodyさん03/07/08 12:17ID:???
>>338
レスありがとうございます。しかし、期待したデータではありませんでした…。
期待するデータは HTTP/1.x 200 OK とかサーバーが返すレスポンスヘッダーなんです。
0344nobodyさん03/07/08 12:34ID:???
>>343
ヘッダじゃなくレスポンスコードだろ

>print $res->header; # ヘッダー全体を出したいっ!!

print $res->code . $res->message;
0345nobodyさん03/07/08 13:02ID:???
>>343
6.1 ステータスライン
レスポンスメッセージの最初の行は、プロトコルのバージョン、ステータスコード番号、それに関連したテキストフレーズからなるステータスラインで、それぞれの要素は、SP によって分けられる。最後の CRLF シーケンス以外には、CR も LF も許されない。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

6.2 レスポンスヘッダフィールド
レスポンスヘッダフィールドを用いて、サーバはステータスラインに置けないレスポンスに関する追加的な情報を渡すことができる。これらのヘッダフィールドは、サーバについてや、 Request-URI によって識別されるリソースへの更なるアクセスに関する情報を与える。
0346nobodyさん03/07/08 13:11ID:???
>>344
すいません…。

HTTP/1.0 200 OK
Date: Tue, 08 Jul 2003 04:10:07 GMT
Server: Apache/2.0.46 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.46 OpenSSL/0.9.6g DAV/2 FrontPage/5.0.2.2634 PHP/4.3.2 mod_gzip/2.0.26.1a
Last-Modified: Tue, 08 Jul 2003 04:09:31 GMT
ETag: "84f45-3d4e-63ccb4c0"
Accept-Ranges: bytes
Content-Length: 15694
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain

↑こういうのが欲しいんです。
0347nobodyさん03/07/08 13:49ID:???
>>346
お前はアホか。
http://member.nifty.ne.jp/hippo2000/perltips/HTTP.html
をディスプレイに穴があくほど読め
0348nobodyさん03/07/08 14:22ID:???
>>323
my @result = sort { !defined $form{$a} ? 1 :
(!defined $form{$b} ? -1 : $form{$a} <=> $form{$b}) } keys %form;

こういうことじゃなくて?
それとももっとスマートに書けってこと?
■ このスレッドは過去ログ倉庫に格納されています