Perlコーディング初心者質問スレ Part 42
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0514nobodyさん
2005/06/22(水) 01:31:35ID:???だからこういう事だろ?
my $rssfile = $cgi->url_param('rssfile');
$rssfile =~ s|^[./]*|$ENV{'DOCUMENT_ROOT'}/|;
-f $rssfile || die 'No such file';
open my $fhin, '<' . $rssfile or die $!;
外から渡される文字列は全部危ないんだから、危なくないよう加工・確認
してから使うのがセオリー。問答無用で DOCUMENT_ROOT を基点にして
しまえば中か外か判断する必要はないし、DOCUMENT_ROOT の外の
階層構造をわざわざ外部に教えてあげる必要もない。DOCUMENT_ROOT の
外のファイルを読ませたいのなら、ハッシュを一個用意してそのキーを指定
させる等、パスを直接的に指定させない方法を採ればいい。
%rssfile = (index => '...', news => '...', ... );
if (defined $rssfile{$rssfile}) { ... }
0515nobodyさん
2005/06/22(水) 01:34:47ID:???chdir ($ENV{'DOCUMENT_ROOT'});
とかにして、最初の スラッシュ を削除するとか。
つーかそーゆーモジュールすでにありそうだし、それくらいのメソッドくらい自分で造れそうだがw
0517511
2005/06/22(水) 02:15:15ID:???ありがとうございました。
0518nobodyさん
2005/06/22(水) 11:32:07ID:???ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
以下抜粋
>上の例では、ファイルハンドルを使う前にそれをスカラー変数に代入していました。
>これは式でもなく、ハッシュや配列の添え字でもなく単純なスカラー変数だけがprintやC<printf>、
>ダイヤモンド 演算子と一緒に使えるのです。コンパイル時にエラーになってしまうような間違いの例を挙げてみましょう:
> @fd = (*STDIN, *STDOUT, *STDERR);
> $got = <$fd[0]> # 間違い
これって、ハンドルのリファレンスをハッシュに入れることは出来ないってことなんでしょうか。
以下のソースでエラーは出ないのですが、書き込みも読み込みも動きません。
package p_file;
my %ref_handle; #クラスで使うファイルハンドルのハッシュ(複数のファイルを同時に開けるようにしたい)
sub open {
my ($id, $path, $file) = @_;
local *FILE;
$ref_handle{$id} = \*FILE; #←ここが問題?
open($ref_handle{$id} , "+>>$path$file");
}
sub read {
my ($id, $row, $begin) = @_;
my @tmp = <{$ref_handle{$id}}>;
〜以下略
sub close {
my ($id) = @_;
close($ref_handle{$id});
}
0519nobodyさん
2005/06/22(水) 11:51:25ID:???君が引用しているのは一つ下の問答のようだが、当の URL の問答に
> 複数のハンドルや無名ハンドルを作りたいのであれば、
> Symbol, FileHandle, IO::Handle といったモジュールを参照してください。
とあり、その例も書いてある。また君が引用している問答の中に、
> このアプローチは print や printf をオブジェクトメソッドの呼び出しの
> ように扱うものですが、これはダイヤモンド演算子には使えません。
> なぜなら、ダイヤモンド演算子はカンマなしの引数を取る関数ではなくて
> 本当の演算子だからです。
と書いてある。
0521nobodyさん
2005/06/22(水) 13:06:21ID:???my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]);
return sprintf("%04d%02d%02d", $year+1900, $mon+1, $day);
なら "%04d%02d%02d" → 20050622 のようになることは理解できるのですが、
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($new);
$day = sprintf("%.4d/%.2d/%.2d", $year+1900, $mon+1,$day);
で "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか。
この『.』の意味が、調べてみても手元の本には載っていなくてわからず、すっきりしません。
桁数の指定(例えば『5.2』とかの)の . ではないようですし・・・
そして、"%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわないでしょうか?
0522nobodyさん
2005/06/22(水) 13:33:30ID:???手元の本に載ってなければマニュアルを読めばいいじゃない。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod#sprintf
英語が苦手なら駱駝本を買えばいいじゃない。
>>7
> "%.4d/%.2d/%.2d" → 20050622 となるのはどうしてなんでしょうか
$year + 1900 を 4 桁の精度に丸めると 2005 、$mon + 1 を 2 桁の精度に
丸めて ( d は整数型指定子なので) 0 パディングすると 06 、$day を 2 桁
の精度に丸めると 22 、それぞれ当てはめて 2005/06/22
> "%.4d/%.2d/%.2d" は "%04d%02d%02d" に書き換えちゃってもかまわない
> でしょうか?
スラッシュが無くなっても構わないならご自由に。
0523nobodyさん
2005/06/22(水) 15:55:25ID:pDQou/2TPermission denied on server. (chmod)とでます。
その上のフォルダは変えられたのですが・・・
上記のエラーはどういう意味なんでしょうか?
0524521
2005/06/22(水) 16:18:22ID:???ありがとうございます。
URL先読んでだいぶ分かりました。
そして手元の本を見直したら、
「.」の後の数値の意味に「文字列の最大幅」というのがちゃんと載ってました。orz
「5.2」のように「.」には必ず前後に数値がないといけないと思い込んでしまってました。
>スラッシュが無くなっても構わないならご自由に。
そうですね、下はスラッシュを入れてますね。気がつかなかった・・・
これは
$day = sprintf("%04d%02d%02d", $year+1900, $mon+1,$day);
$day =~ s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
とやっておこうと思います。
どうもありがとうございました。
0525nobodyさん
2005/06/22(水) 16:51:26ID:???初心者質問スレが無くなって不便だな…。代わりはここでいいんだろうか。
CGIとかPerlとか超初心者なんだけど、
http://pc8.2ch.net/test/read.cgi/php/995618200/
Perl に関係無い話は上記スレへ。
>>524
"%04d/%02d/%02d"
0527nobodyさん
2005/06/22(水) 17:53:22ID:???hint:
sprintf("%04d%02d%02d", $year, $mon, $day); #20050622
sprintf("%04d/%02d/%02d", $year, $mon, $day); #2005/06/22
sprintf("%04d年%02d月%02d日", $year, $mon, $day); #2005年06月22日
0528nobodyさん
2005/06/22(水) 18:12:51ID:???hint:
$hoge = "ほげ〜ほげ〜ほげ〜<br>お〜れ〜は%s\<br>ガ〜キだいしょ〜うっとくらあ";
$hoge = sprintf($hoge, 'ジャイアン');
0529nobodyさん
2005/06/22(水) 18:46:41ID:VvFC8JSFmy $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
print br (), br (),
"$row->{t} $row->{status}",
" [", a ({-href => $edit_url}, "Edit"), "]",
" [", a ({-href => $delete_url}, "Delete"), "]",
br (), "\n",
"$row->{content}\n";
1行目のsprintfで文字列を指定して、出力しているのはわかります。
しかし、括弧内の意味がわかりません。変数"id"について、URLを指定しているらしい
ですが、よくわかりません。
どっかに詳しく解説している、サイトとかありませんかね?
0530nobodyさん
2005/06/22(水) 18:51:23ID:???0531524,521
2005/06/22(水) 19:10:41ID:???ええと、わざわざ後からスラッシュを入れる方式(>524)にした理由は、
配布されてるあるCGIをカスタマイズしていたら、
そのCGIには日付を取得するサブルーチン(>521の上)があって
ほとんどの部分でそのサブルーチンを利用しているのに、
一カ所だけ利用していない(>521の下)部分があって、
どうしてこの部分では利用して無いのか?他と違うデータなのか?
というのが始まりだったんです。
ちなみにそのCGIの他の箇所で「2005/06/22」形式のデータが必要な時は、
サブルーチンで「20050622」形式のデータを取得した後
s/(\d{4})(\d{2})(\d{2})/$1\/$2\/$3/;
をやってましたので、それに揃えようかと。
0532nobodyさん
2005/06/22(水) 21:23:12ID:SO7tDhegOSはRedhatなんですけど
0533nobodyさん
2005/06/22(水) 21:57:46ID:???0534nobodyさん
2005/06/23(木) 00:40:06ID:???・ID(10バイト程)を入力してもらう
・IDを受け取ったプログラムはIDを一行ごとに入力してある
ファイルを順次読み込み(読みオンリーでオープン)
該当するIDがあるかどうかチェックする。
(対象のIDは5千件程度)
というWebを作りたいんですが、読み込みオンリーで
オープンしておけば一度に10人とか同じチェック側の
プログラムを動かしてもロックかかったりしてパフォーマンス
が落ちることはない?それともプログラム中で条件式(if?)
の中で固定でチェックした方がいいのでしょうか?
0535nobodyさん
2005/06/23(木) 00:54:13ID:???0536nobodyさん
2005/06/23(木) 00:57:09ID:???0538nobodyさん
2005/06/23(木) 01:40:39ID:???0539nobodyさん
2005/06/23(木) 01:58:38ID:dskomwuHスレを教えてくれてありがとうございました
0540nobodyさん
2005/06/23(木) 02:32:10ID:???処理を速攻で終わらせてメモリを開放してあげるほうが重要かと。sleepとか使っちゃダメ。
・・・10人同時って、ほんとにそんな状況発生するのかな?
0541nobodyさん
2005/06/23(木) 15:11:47ID:???CGIを改造中なのですが、知恵を貸してください。
ログの情報を「○番目の要素でソートして表示する」と言うのをしたいのですが、うまくできません。
他のCGIからソート部分だろうと思われるものをコピッて手を加えたのですが、ダメです。
open(IN,"$logfile") || &error("Open Error : $logfile");
@data = <IN>;
close(IN);
@tmp = map {(split /<>/)[3]} @data;
@slist = @data[sort {$tmp[$b] cmp $tmp[$a]} 0 .. $#tmp];
$i=0;
$flag=0;
while (@slist) {
($no,$date,$name,$genre,$com,$kousi,$day,$w1,$w2,$w3,$w4,$w5,$w6,$w7,$time,$mony,$tail,$w,$h) = split(/<>/);
---------
$genreにソートしたいもの(g_1,g_2,g_3〜)が入っていて、それを元に並べ替えしたいんです。
この状態で動作させると、変数が入っていない表が無限に続いてしまいます。
どこが間違っているのでしょうか? お願いします。
0542nobodyさん
2005/06/23(木) 16:03:51ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_sort_an_array_by_anyth
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc8.2ch.net/test/read.cgi/php/1105046286/
0543nobodyさん
2005/06/23(木) 16:06:01ID:AbvQdhd4use CGI;
$cookie = $cgi->cookie(-name => 'hoge',
-value => 'fuga',
-expires => '+1h',
);
print $cgi->header(-cookie=>$cookie);
この結果は
Set-Cookie: hoge=fuga; path=/; expires=Thu, 23-Jun-2005 07:21:10 GMT Date: Thu, 23 Jun 2005 06:21:10 GMT Content-Type: text/html; charset=ISO-8859-1
のようになりうまくクッキーを取得したようです。
しかし、上のクッキーを取得するために
print $cookie = $cgi->cookie(-name=>'hoge');
と記述しましたが、何も値が入ってませんでした。
cgi.pmを使用してクッキーを取得するにはどのようにしたらよいのでしょうか
0544nobodyさん
2005/06/23(木) 17:34:51ID:???<q cite="http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod">
クッキーを取り出すには、cookie()メソッドを-valueパラメータなしで
呼び出すことによって名前で要求します:
use CGI;
$query = new CGI;
$riddle = $query->cookie('riddle_name');
%answers = $query->cookie('answers');
</q>
0546nobodyさん
2005/06/23(木) 20:57:35ID:???原文が段落あるんだろうから、blockquote のがいいけど。
blockquote だと p とか pre とかも入れないといけないけど。
0547nobodyさん
2005/06/23(木) 22:19:04ID:???まぁ5000件くらいじゃ大丈夫だと思う。
もっと多い場合の対処法としては
データファイルをソートしておく→IDが存在しない時早く終れる。
IDの頭文字別にデータファイルを用意する→個々のデータファイルが小さくなるから早く処理が終わる。
0548nobodyさん
2005/06/24(金) 05:19:50ID:kge0P1YB他の方が製作したCGIに次のような記述がありました。
$\ = "\n";
print "<html>";
print "<body>";
print "<p>test</p>";
print "</body>";
print "</html>";
$\ = "";
これの最初の $\ = "\n"; についての質問です。
これは、恐らくHTMLソースの改行が目的であることは分かりますが、
$\ とはどういった変数なのでしょうか?
また、同じように使える特殊な変数はあるのでしょうか?
検索エンジンで必死に調べたのですが、「$\」で絞り込むのは厳しいようで…。
ご教示お願いします。
0552nobodyさん
2005/06/24(金) 12:27:48ID:QTITokL2掲示板などのようにcgiやphpなどで動的に表示が変わるページを
ページが表示されてからソースの表示をした時に見られるような
htmlソースでダウンロードしたいのですが、やり方がわかりません。
また、niftyのサーバで動かしたいので特殊なモジュールも使用できないので
それでも可能な方法があれば教えて下さい。
本当にやりたい事はその先で、そのソースをまたperlで解析して
テキストを表示するというものです。
ダウンロードしたファイルからそのテキストをただ表示する部分は出来ているので
ダウンロードの部分を教えて下さい。
宜しくお願いします。
0553nobodyさん
2005/06/24(金) 12:41:15ID:???>WEBページを読み込みたいのですが可能でしょうか?
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>5
>前すれ>>991
>Socketを使わないとむりぽ。
>がむばってネ。
がむばってネ。
おとなしくLWPとか使うのがいいんだけど。niftyなんぞ無視して。
http://pc.2ch.net/php/kako/1037/10377/1037797479.html>>9
>LWP::Simpleモジュールが入っているなら
>perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。
>
>use LWP::Simple;
>getstore "http//:www.yahoo.co.jp", "yahoo.html";
>みたいな感じ。
がむばってネ。
0554nobodyさん
2005/06/24(金) 13:17:47ID:???まじめな話、もう少し日本語を勉強せよ
0555nobodyさん
2005/06/24(金) 15:58:04ID:/NGYg1v6LWP::Simpleモジュールも入っていないようです。
自PCでActiveperlを実行した時は
HTTP::Lite;モジュールを使ったのですが、
これもNiftyでは使えないようです。
0556nobodyさん
2005/06/24(金) 16:01:15ID:???ということで使いたきゃ自分で必要なもの全部揃えてアップして使いなさい。
0557548
2005/06/24(金) 17:18:12ID:???ご回答ありがとうございました。
Perlの特殊変数のページ非常に参考になりました。
難しくて全てを理解するまでは時間がかかりそうですが、
とりあえず気になったことが分かって嬉しいです。
0558あ
2005/06/24(金) 17:24:31ID:L251Ppfjパッケージ内でグローバルな宣言をされた変数って、それぞれ別にNewで生成されたオブジェクト変数ごとで固有に持たせる方法はありますか?
$a = new foo;
$b = new foo;
fooは内部のmyグローバル変数 s をもってて、set メソッドで代入しgetメソッドで取り出せるとします。
$a->set(100);
$b->set(200);
とすると、
print $a->get;
で 200 と返ってきてしまいます…
javaそのほかのようにインスタンスごとの固有値は持たせられないのでしょうか?基本的で申し訳ありませんがよろしくご教授ください。
0559nobodyさん
2005/06/24(金) 17:25:44ID:???初歩的な質問宜しいでしょうか?
perlで文字列の長さを取得する関数って
ないのでしょうか?
my $len = strlen('auaua');
^^^^^こんなの、、、
0560nobodyさん
2005/06/24(金) 17:31:04ID:???0562559
2005/06/24(金) 17:46:00ID:???わーい
本当にありがとーございますっ
0563あ
2005/06/24(金) 18:01:45ID:L251Ppfj言い方が変でした。すいません。
ようは、パッケージのインスタンスごとに、変数値を持たせられる方法が知りたいのです。同一のパッケージから生成したインスタンスごとでも
$a->get ⇒ 100
$b->get ⇒ 200
のようにできるコーディングがどうすればいいかわかりません…
Perlではこのような動作の要求は無理なんでしょうか?
0566nobodyさん
2005/06/24(金) 18:20:36ID:???my $class = shift;
my $self = {};
bless ($self, $class);
}
sub set {
my $self = shift;
$self->{s} = shift;
}
sub get {
my $self = shift;
return $self->{s};
}
0567563
2005/06/24(金) 18:26:07ID:???ケータイからのカキコで必死だったためろくにsageませんでした;;
なるほどです。感謝!
0569nobodyさん
2005/06/24(金) 18:32:24ID:???0570nobodyさん
2005/06/24(金) 18:32:49ID:???始めの一文字が同じならtrueとしたいのですが
そのような関数もしくはやり方等ないのでしょうか?
昔
if( ($abc cmp $def) >1 ){:
このようなコード書いたような記憶はあるのですが、、、
0571nobodyさん
2005/06/24(金) 18:39:48ID:???if (substr ($abc, 0 , 1) eq substr ($def, 0 , 1)) { 〜 }
0572nobodyさん
2005/06/24(金) 21:10:46ID:???0573nobodyさん
2005/06/25(土) 00:44:36ID:???0574nobodyさん
2005/06/25(土) 01:22:00ID:???でもそれでファイルには書けないんだけどさ。
0575nobodyさん
2005/06/25(土) 01:29:56ID:???0576nobodyさん
2005/06/25(土) 02:58:57ID:???cgi-lib.plのReadParseで読み込んだデータ
$in{'hoge'} (中身はチェックボックスで選択された複数のデータが入っています)があります。
print $in{'hoge'};とすると
あああ いいい ううう えええ おおお かかか ききき くくく・・・のように半角スペース区切りのデータが出ますが、
これを
あああ・いいい・ううう(改行)
えええ・おおお・かかか(改行)
ききき・くくく
のように、3の倍数個目のデータには改行を、それ以外には中黒「・」で区切るようにして表示したいのです。
単純に区切り文字を他の文字に全て置き換えすることなら出来るのですが、ちょっと複雑になるとお手上げです。
ご教示よろしくお願いします。
0577nobodyさん
2005/06/25(土) 03:06:46ID:VyiiD8SR半角スペース区切りだっけ?
普通に split して for文使うとかはどうよ
0578nobodyさん
2005/06/25(土) 03:57:59ID:???例えば、区切りとしてじゃなく、各データのケツに改行とか中黒が着いてると考える。
つまり「3の倍数個目か」「最後のデータか」「それ以外」かで後ろに何をprintするか分岐したらいい。
ループの中にif文2個書いてもいいし、最後だけが例外的なのを利用してループが最後のデータ直前で終わるようにしてもいい。
0579nobodyさん
2005/06/25(土) 04:46:44ID:???$_ = "あああ\0いいい\0ううう\0えええ\0おおお\0かかか\0ききき\0くくく";
while (/([^\0]*)\0([^\0]*)\0?([^\0]*)\0?/g) {
print $1, ($2 ne '' && '・'. $2), ($3 ne '' && '・'. $3), "\n";
}
とかな。
0580nobodyさん
2005/06/25(土) 05:24:23ID:???0581nobodyさん
2005/06/25(土) 14:43:44ID:???0582nobodyさん
2005/06/25(土) 15:04:05ID:???連続で申し訳ありませんが、これを実行すると
Can't use string ("") as a subroutine ref while "strict refs" at 〜
となってしまいます。find()をするとこうなるのですが、どこがおかしいのですか?
use Net::CIDR::Lite;
my $net = Net::CIDR::Lite->new;
my @airedgecidr = (
'221.119.8.0/24', '221.119.9.0/24'
);
foreach (@airedgcidr) {
$net->add($_);
}
$result = $net->find('221.119.8.1');
0584nobodyさん
2005/06/25(土) 15:20:19ID:???!
use strictしたところ、配列の変数名が間違っていることに気づきましたorz
ありがとうございました。
# rootさんのソースなのに…
0585nobodyさん
2005/06/25(土) 15:29:33ID:???0587nobodyさん
2005/06/26(日) 03:21:28ID:???レンタルの日記を借りて、スキンを使ったのですが画像を投稿出来ないので
自分でスキンのタグを変更可能してもおkと書いてあったので
画像を無理やり出すイレギュラーってのをやりたいのですが
何を挿入していいか分かりません・・。
画像投稿可版・不可版(同スキン)を両方DLしてソースを見比べたのですが
どうしても分らず、ぐぐっても分りませんでした・・。
どんなタグ?をどの辺りに挿入すればいいのか教えてもらえませんか・・?
よろしくお願いします。
(どこで聞いていいか分からなかったのでスレ違いだったらすみません・・)
0588587
2005/06/26(日) 03:24:35ID:???他で聞いて来ます。
申し訳ありませんでした・・。
0589nobodyさん
2005/06/26(日) 23:02:23ID:3dNr93yGprint SOCKET "User-Agent: " . $browser . "\n";
で止まってしまうものがあるようです。
モジュールが入っていることは確認できているのですが、もしも
なにかお気付きの点等ございましたらご教示いただきたく思って
おります。どうか宜しくお願いいたします。
use Socket;
use FileHandle;
my $ip = inet_aton($host) || die "host($host) not found.\n";
my $sockaddr = pack_sockaddr_in($port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "socket error.\n";
connect(SOCKET, $sockaddr) || die "connect $host error.\n";
autoflush SOCKET (1);
binmode(STDOUT);
print SOCKET "GET $directory$filename HTTP/1.1\n";
print SOCKET "User-Agent: " . $browser . "\n";
print SOCKET "Host: " . $host . "\n";
print SOCKET "Connection: close\n\n";
while(<SOCKET>){
m/^Content-Type: ([^\r\n]+)/i && print "Content-Type: $1\r\n";
m/^Content-Length: ([^\r\n]+)/i && print "Content-Length: $1\r\n";
m/^\r\n$/ && last;
}
print "\r\n";
while(<SOCKET>){
print $_;
}
close(SOCKET);
0590nobodyさん
2005/06/26(日) 23:41:10ID:???なんで
> print SOCKET "User-Agent: " . $browser . "\n";
で止まってるって思ったの?
0591nobodyさん
2005/06/27(月) 01:10:18ID:???0592nobodyさん
2005/06/27(月) 01:29:08ID:???HTMLの記述をprint "〜"に変換する作業を一括で行うソフトウェアを探しているのですが、そのようなソフトはありますか?
例えば、
<a href="abc.html">ABC</a>
を
print "<a href=\"abc.html\">ABC</a>"
と変換できるものです。
0593nobodyさん
2005/06/27(月) 01:37:26ID:???0594nobodyさん
2005/06/27(月) 01:44:19ID:???そんな方法があったんですか・・・・。今日はじめた初心者だったのでごめんなさい。
>>593さんありがとう('A`)
0596nobodyさん
2005/06/27(月) 02:14:33ID:???0597nobodyさん
2005/06/27(月) 02:18:26ID:???0598nobodyさん
2005/06/27(月) 02:28:57ID:???ご返答有難うございます。
止まっていると思ったのは、
print SOCKET "User-Agent: " . $browser . "\n";
print SOCKET "Host: " . $host . "\n";
を外したら進んだためです。
具体的には、KeitaiPicutureという画像変換サービスで変換された
画像をSOCKETでとってくる仕組みを作っているのですが、
GET $directory$filename?User-Agent=UA
だと成功するんですよね。
とにかくご教示有難うございました。
0599nobodyさん
2005/06/27(月) 03:10:20ID:???そのサービスが$ENV{HTTP_USER_AGENT}じゃなくてクエリーのUser-Agentを見てるからだろ。
0601nobodyさん
2005/06/27(月) 08:08:58ID:7ZY2M4BI0602nobodyさん
2005/06/28(火) 16:25:00ID:l0OJ7VtDuse HTTP::Request;
use LWP::UserAgent;
my $url = 'http://www.yahoo.co.jp';
my $request = HTTP::Request->new(GET => $url);
my $ua = LWP::UserAgent->new;
my $response = $ua->request($request);
if($response->is_success) {
print $response->content;
} else {
print $response->status_line;
}
という LWP::UserAgent をテストするためのCGIを、サンプルを元に組んだのですが、
[Tue Jun 28 15:42:43 2005] [error] Premature end of script headers:
ということで 500 Internal Server Error になってしまいます。
Premeture〜ってぐぐってみたけどよくわかりません。
原因として何が考えられますか?
0603nobodyさん
2005/06/28(火) 16:52:11ID:???0606nobodyさん
2005/06/28(火) 17:58:49ID:???--------------------------------
my %dir_name=();
readDir(\@dir_name);
sub readDir{
my $dirname_ref = shift;
$dirname_ref->{'aaa'}="BBB";
}
--------------------------------
を実行しても
Can't coerce array into hash at cron_day_table.cgi line 50.
とエラーになってしまいます。
何がいけないのでしょうか?
ご助力を頂けますと助かります。
0608606
2005/06/28(火) 18:17:44ID:???本当だー
ありがとーございますっ
スレ汚し失礼いたしました。
0609606
2005/06/28(火) 19:37:41ID:???my %dir_name=();
my $dirname_ref = \%dir_name;
$dirname_ref->{'bbb'}='hoge';
$dirname_ref->{'ccc'}='hoge';
$dirname_ref->{'aaa'}='hoge';
my $key;
foreach $key(keys %dir_name){
print "$key -> $dir_name{$key}\n";
}
--------------------------------
として出力すると↓
--------------------------------
bbb -> hoge
aaa -> hoge
ccc -> hoge
--------------------------------
のようになってしまいます。
下記のように入れた順番通りに出力したいのですが
bbb -> hoge
ccc -> hoge
aaa -> hoge
そういった場合はどうすればよろしいのでしょうか?
ご助力を頂けますと助かります。
0610nobodyさん
2005/06/28(火) 19:44:18ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_keys_HASH
0611nobodyさん
2005/06/28(火) 19:46:11ID:???もしかして、無かったことになった?
0612nobodyさん
2005/06/28(火) 19:52:27ID:???http://search.cpan.org/~nwclark/perl-5.8.7/pod/perl58delta.pod#Deprecations
■ このスレッドは過去ログ倉庫に格納されています