[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/02 01:51 / Filesize : 211 KB / Number-of Response : 664
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 63



1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???]
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2 以降

前スレ hibari.2ch.net/test/read.cgi/php/1295170172/

309 名前:304 mailto:sage [2011/11/16(水) 10:04:04.24 ID:???]
ありゃ。smooth(ズ)→スムース みたいなもんで英語では parz って発音するものだと思い込んでたからそれに合わせてたわ。
調べてみたらイギリス英語系の辞書だとパーズだけど、アメリカ英語でパースが一般的みたいだからそっちのほうがいいや。サンクス

310 名前:nobodyさん mailto:sage [2011/11/16(水) 16:16:46.49 ID:???]
>>309
>イギリス英語

へー。良いことを知った。

311 名前:nobodyさん mailto:sage [2011/11/16(水) 16:34:39.13 ID:???]
本当だ。
2つ発音されるね。

parseの意味 - 英和辞書 - goo辞書
dictionary.goo.ne.jp/leaf/ej3/61513/m0u/parse/

312 名前:nobodyさん mailto:sage [2011/11/16(水) 16:52:26.25 ID:???]
そうか。どっちもありなんだ。
勉強になったぜ。

313 名前:nobodyさん mailto:sage [2011/11/16(水) 23:26:19.41 ID:???]
テキストファイルから3行だけほしいときって、1行で記述することってできますか?

今は for で回して push してるんだけど、
@lines = <$fh> x 3;
みたいな感じで書けたら落ですよね。。。

314 名前:nobodyさん mailto:sage [2011/11/17(木) 00:05:31.82 ID:???]
>>313
#!/usr/bin/perl -w
use strict;
my @line = (scalar <DATA>, scalar <DATA>, scalar <DATA>); # 幾つ?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

@line = map scalar <DATA>, 0..2; # 0から2とは?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

push @line, scalar <DATA> while @line < 3; # 意図が分かりやすい
print @line;

__DATA__
foo
bar
baz
quux

315 名前:nobodyさん mailto:sage [2011/11/17(木) 00:27:12.12 ID:???]
やっぱ、なんかしらで回すしか無いですよね。
ありがとうございました。

316 名前:nobodyさん mailto:sage [2011/11/17(木) 00:48:38.68 ID:???]
>>315
ループを避ける事自体が至上命令ならば >>314 の1番目か
$/ = \64; # 充分なサイズのバッファ
my @line = <DATA> =~ /^(.*\n)(.*\n)(.*(?:\n|\z))/;

317 名前:nobodyさん mailto:sage [2011/11/17(木) 00:53:27.15 ID:???]
@line = (<DATA>)[0..2];



318 名前:nobodyさん mailto:sage [2011/11/17(木) 09:42:10.49 ID:???]
至上主義ってわけじゃないんだけど、ループの中で特に処理をするわけじゃないから
1行で簡潔にできたら嬉しいよね〜

っていう程度です。


319 名前:nobodyさん mailto:sage [2011/11/18(金) 00:09:48.76 ID:???]
ループを決して書こうとしない部下を思い出した。
そいつは自分自身がループして同じ内容を必要な行数分タイプしてたっけ。

320 名前:nobodyさん mailto:sage [2011/11/18(金) 09:22:43.24 ID:???]
8bit機の時代はループの条件判定のタイムロスを惜しんで
ループ展開とかやったっけな。アセンブラで。

321 名前:nobodyさん mailto:sage [2011/11/18(金) 10:21:10.82 ID:???]
ループではないけど、100程度のif文を自動生成するプログラムなら見たことがある…

322 名前:nobodyさん [2011/11/18(金) 21:40:15.63 ID:1hunDax1]
入門書を読んでて気になったのですが
ダブルクォート文字列で使われるエスケープシーケンスと
マッチ演算子の中の正規表現で使われるエスケープシーケンスは
よく使われる改行文字(\n)やタブ(\t)などが両方にあるので
厳密に言えば違うけれども、大体同じものと理解していいのでしょうか?

それとも全く違う、あるいは全く同じものなのでしょうか?

323 名前:nobodyさん mailto:sage [2011/11/18(金) 21:56:27.18 ID:???]
覚えることが少なくなるように同じ記法を採用しているだけで、
それを解釈するコードは文字列と正規表現では別物だと考えて
ください。

324 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:39:08.87 ID:???]
全く同じであれば、本の記述は1回のはず。
別物だから区別して書いてあって、本に2回出てくる。

でも覚えやすいように同じ記法にしている。

325 名前:nobodyさん mailto:sage [2011/11/23(水) 23:35:55.57 ID:???]
やっと規制がとけました

>>323-324
ありがとうございます

326 名前:nobodyさん mailto:sage [2011/11/26(土) 22:25:41.09 ID:???]
CGIに値を渡したいときの方法で質問です。

@ttp://example.com/index.cgi/1/2/

と、PATH_INFOで渡すのと

Attp://example.com/?a=1&b=2

と、.htaccessに「DirectoryIndex index.cgi」を書いてPOST風?(呼び方がわからない)で取得する方法があると思いますが、
みなさんどちらを使っていますか?
どちらを使おうか悩んでいます。
(最初、index.cgiを消してPATH_INFOで渡せればすっきりするなと思いましたが、それだとttp://example.com/1/2/となって
index.cgiを読ませる場所とPATH_INFOの切り分けができないと気づいて今に至っています)

個人の好みになるかもしれませんが、こっちをこんな理由で使っているという感想などいただけたら参考にしたいと思います。
ちなみにformタグではGETを使用しています。

327 名前:nobodyさん mailto:sage [2011/11/26(土) 22:49:02.08 ID:???]
>>326
txqz.net/blog/2007/06/16/1641



328 名前:nobodyさん [2011/11/26(土) 23:38:20.62 ID:zFlJhwY9]
system()で外部コマンドを呼び出すと呼び出しは行われるのですが、そのあとの処理に進まずに
Internal errorになってしまいます。なにか呼び出し方があるのでしょうか

system '/bin/ls', "-la";
print "Location: index.html\n\n";


329 名前:nobodyさん mailto:sage [2011/11/26(土) 23:51:55.90 ID:???]
そのスクリプトを手元で実行したことはあるかい?

330 名前:nobodyさん mailto:sage [2011/11/27(日) 00:07:55.85 ID:???]
CGIで動かしてるんだったらHTTPサーバのログにエラー内容が記録されてるんじゃないか?

331 名前:nobodyさん [2011/11/27(日) 00:56:06.95 ID:E4v1+esL]
malformed header from script. Bad header=total 68: test.cgi, referer: redhat6/test.html
とか出てます。Systemを実行しなければこのメッセージは出ないです。


332 名前:nobodyさん mailto:sage [2011/11/27(日) 01:07:18.85 ID:???]
>malformed header
だからヘッダがどうなってるか見ろ

333 名前:nobodyさん [2011/11/27(日) 01:44:44.18 ID:E4v1+esL]
ls -la とか バイナリの実行ファイルとかですが、、、

334 名前:nobodyさん mailto:sage [2011/11/27(日) 02:47:47.23 ID:???]
うーん…
真っ先に HTTP ヘッダがなければCGIとして機能しないでしょ。
エラーになるのは当たり前。
でもって Location: で飛ばしてるんだから system '/bin/ls', '-la'; は全く意味がない。
仮に print "Location: index.html\n\n"; の次に置いても無視されるだけ。
そのCGIの目的(用途)は何なの?

335 名前:nobodyさん mailto:sage [2011/11/27(日) 03:52:11.45 ID:???]
ん? Location: 〜 を print しようがスクリプト自体は最後まで走るでしょ?
問題は system の出力先が標準出力、つまり普通に print するのと同じところに行ってるせいで、
スクリプトからサーバーへ渡される出力が

total 8
drwxr-xr-x 2 nobody nogroup 4096 Nov 27 00:00 ./
drwxr-xr-x 3 nobody nogroup 4096 Nov 27 00:00 ../
Location: index.html

みたいになってて、
サーバーとしては改行2つより前の部分は HTTP ヘッダとして解釈しなきゃいけない、
でも Location 以外の行は正しい HTTP ヘッダではない。
だからそこで内部エラーとして止めてる、ってことでは?
CGI 試す環境ないんで推測だけど。

336 名前:nobodyさん mailto:sage [2011/11/27(日) 04:36:05.90 ID:???]
>>335
だからそう書いてるだろ。

337 名前:nobodyさん mailto:sage [2011/11/27(日) 23:08:22.74 ID:???]
>>332
「ヘッダ」が分からないので見ろといわれてる対象が分かっていない
に一票。

つまり
print "Location: index.html\n\n";
は、理解して書いているのではなく、他のプログラムのコピペ。



338 名前:nobodyさん mailto:sage [2011/11/27(日) 23:27:05.03 ID:???]
print "Location: index.html\n\n"; の前に system を置いちゃうくらいだからそうなんだろうな。

339 名前:nobodyさん mailto:sage [2011/11/28(月) 01:55:16.13 ID:???]
ここまで答えのようなヒントが出てれば、あとは大丈夫でしょう。きっと・・・

340 名前:326 mailto:sage [2011/11/28(月) 15:55:21.96 ID:???]
>>327

ありがとうございます。
作成中のものはエントリのページなのでPATH_INFOで渡したいと思います。

この場合、URLからindex.cgiを消して尚且つPATH_INFOを取得するには
どのようにしたら良いのでしょうか?

ttp://example.com/index.cgi/1/2/

ttp://example.com/1/2/
にして、index.cgiを実行し、PATH_INFOから"/1/2/"取得したい

341 名前:326 mailto:sage [2011/11/28(月) 16:21:49.46 ID:???]
>>340
を実現するためググってみました。

ttp://hatsugen.zakzak.co.jp/qa6717936.html

↑ここの「ANo.3」で下記のように書かれていました。


たとえば、httP://hoge.com/A/B というURLをブラウザに与えると、ブラウザはHTTPサーバー(hoge.com)に対して、/A/Bという
ファイルを送れと要求します。
サーバーはこれを探しますが、Bというファイルがなければ、それをディレクトリとみなして/A/B/として/A/B/を探します。
それが存在していれば開いてみます。
 httpd.confや.httaccessで下のように指定してあれば、
<IfModule dir_module>
  DirectoryIndex index.html index.htm index.cgi index.sh
</IfModule>
 前から順番にファイルを探して表示します。いずれもなければ、またこれも設定にしたがってディレクトリ内のファイル一覧を表示するか、
エラーを返すか、その指定もなければ/B/を切り捨てて環境変数に格納し、/Aについて同様な処理を繰り返します。


つづく

342 名前:326 mailto:sage [2011/11/28(月) 16:23:22.87 ID:???]
つづき

そこで下記を行いました。

@ttp://example.com/ の階層にindex.cgiと下記一行を書いた.htaccessを置きました。
DirectoryIndex index.cgi

Attp://example.com/で、ttp://example.com/index.cgiにアクセスしたことを確認しました。

Bttp://example.com/a/にアクセスするとエラーになりました。

ttp://example.com/a/というディレクトリは存在していないので、
一つ上がったttp://example.com/のindex.cgiを探しに行くのではないかと思うのですが
何か間違えているのでしょうか?
どこをどうすればできるようになるのか教えてください。

343 名前:nobodyさん mailto:sage [2011/11/28(月) 16:28:04.90 ID:???]
>>340-342
>>1
Apache〜嗜みとして〜 Part3
hibari.2ch.net/test/read.cgi/php/1043851302/
【Apache】mod_rewriteについて語るスレ
hibari.2ch.net/test/read.cgi/php/1023791370/

344 名前:342 mailto:sage [2011/11/28(月) 23:12:53.78 ID:???]
>>343
ここまでいくとCGIとは関係なくなってきますね。
誘導ありがとうございます。

質問は取り消します。

345 名前:nobodyさん [2011/11/30(水) 10:29:57.17 ID:gvpuZTLB]
以前、Perlのマニュアル(リファレンスドキュメント)をダウンロードしたことがあったのですが、
今行ったら見つかりませんでした
どのページの、どの部分からダウンロードにいけるのでしょうか?

また、以前ダウンロードした時はは内容が英語でした
出来れば日本語版があればそちらをダウンロードしたいのですが、どこか内でしょうか?

346 名前:nobodyさん mailto:sage [2011/11/30(水) 10:51:48.72 ID:???]
perldoc.jp

347 名前:nobodyさん mailto:sage [2011/11/30(水) 21:09:58.63 ID:???]
Markdown.plの出力結果にhtml, head, bodyなどの要素を加えたいんですが
そういうオプションとかってデフォルトの機能にはないですよね?

出力されたhtmlファイルを開く→先頭に書き足す→末尾に書き足す→上書き保存
という処理をするスクリプトを書くということ以上の解決策ってないですよね?



348 名前:nobodyさん mailto:sage [2011/11/30(水) 23:31:46.18 ID:???]
中間ファイル作らなくっても
先頭を書き出す→markdown.plを呼び出して結果を書き出す→末尾を書き出す→保存
でいいんじゃね?

349 名前:nobodyさん mailto:sage [2011/12/03(土) 17:25:31.47 ID:???]
>>347
>上書き保存という処理をするスクリプトを書くということ以上の解決策

何をもって上/下と言っているのか分からんが、Markdown.pl に書き足す
方法はなぜ思い浮かばないのか。

350 名前:nobodyさん mailto:sage [2011/12/03(土) 19:26:36.05 ID:???]
>>349
まあMarkdown.plはいじらないでそのまま使う方が自然だろう。
やるとしたら別名にリネーム(コピー)してから自分専用にカスタマイズ、かな。

ついでに350ゲト

351 名前:nobodyさん mailto:sage [2011/12/04(日) 11:44:58.71 ID:???]
>>347
作者に要望を出す。これ最強。たぶんやってくれる。

352 名前:nobodyさん mailto:sage [2011/12/05(月) 11:39:58.61 ID:???]
GoogleAnalyticsのモバイル版perlコードについて質問です。
下記の@の所って$ENV{'HTTP_REFERER'}が空だったら$refererはundefになりますよね?
ということはAの $referer eq "" でワーニングになるから、
修正したほうがいいですよね??

if ($referer eq "") { #→ ×
if (defined($referer) && $referer eq "") { #→ ○

#####################################################
# Copyright 2009 Google Inc. All Rights Reserved.
use URI::Escape;
use constant GA_ACCOUNT => 'MO-1887809-14';
use constant GA_PIXEL => '/ga.pl';

sub google_analytics_get_image_url {
my $url = '';
$url .= GA_PIXEL . '?';
$url .= 'utmac=' . GA_ACCOUNT;
$url .= '&utmn=' . int(rand(0x7fffffff));
my $referer = $ENV{'HTTP_REFERER'}; #@
my $query = $ENV{'QUERY_STRING'};
my $path = $ENV{'REQUEST_URI'};
if ($referer eq "") { #A
$referer = '-';
}
$url .= '&utmr=' . uri_escape($referer);
$url .= '&utmp=' . uri_escape($path);
$url .= '&guid=ON';
$url =~ s/&/&/g;
$url;
}

353 名前:nobodyさん mailto:sage [2011/12/05(月) 13:46:44.74 ID:???]
しっかりと書くなら
my $referer = exists $ENV{'HTTP_REFERER'} ? $ENV{'HTTP_REFERER'} : '-';
Referer: 0 は明らかに無効だから単に
my $referer = $ENV{'HTTP_REFERER'} || '-';

あと、uri_escape()でやるならURIつかったら
sub {
my $uri = URI->new(GA_PIXEL);
$uri->query_form(
'utmac' => GA_ACCOUNT,
'utmr' => $ENV{'HTTP_REFERER'} || '-',
...
);
return $uri;
}

354 名前:352 mailto:sage [2011/12/05(月) 15:34:16.27 ID:???]
>>353

my $referer = $ENV{'HTTP_REFERER'} || '-';

が自分にはしっくりきました。
ありがとうございます。
よくみたら $query は使ってないですね。
よくみてたら何か色々おかしなコードだ。

とりあえず感謝です。

355 名前:Web初級 [2011/12/08(木) 16:43:00.58 ID:bceXKvCi]
超初心者です。仕事でホームページ1つ作る事に成りました。
職場では私しかDTPの経験がありません(Webかじったのも私一人)。
イラストレーターからドリームウエバーへ、やっと持って来れるようになりましたが、
コーディングがさっぱり上手く行きません。2度ほどWebスクールにデータ持参で習いに
行きましたが、真似してもさっぱり上手く出来ません。
これじゃ何回習っても、金捨てに行くようなもので困っております。
簡単なビジュアルなので、ハイレベルな技術はいらないと思います。
分かりやすい本とかあれば最高なんですが、なにか名案ありませんか。
よろしくお願いします。

356 名前:nobodyさん mailto:sage [2011/12/08(木) 17:01:30.14 ID:???]
>>1を読むこともできないようじゃあ何もできないだろうねえ

357 名前:Web初級 [2011/12/08(木) 18:06:56.56 ID:bceXKvCi]
はははは‥…失礼しました。

nobodyさんが即答するスレでしたか、暗号のようなQAで驚きました。
おみそれしました。



358 名前:nobodyさん mailto:sage [2011/12/08(木) 23:09:44.53 ID:???]
>>355
355のレベルでこれから頑張るよりも専門の会社に発注して、
自分は本業に専念したほうがよい

359 名前: ◆gHpPvpjxUOSB mailto:sage [2011/12/09(金) 00:04:54.14 ID:???]
格安で俺が引き受けちゃるけんね

360 名前:nobodyさん mailto:sage [2011/12/09(金) 10:54:15.39 ID:???]
>>355
そりゃコーディング違いだ。
私もコーディングは外注した方が幸せになれると思う。そんな付け焼き刃じゃどうにもならんでしょ。

361 名前:Web初級 [2011/12/10(土) 08:46:00.83 ID:Suxg5Gi2]
買って来ました「ドリームウエバーCS5.5スーパーリファレンス」と
「3週間でマスターWebデザインの教室」の2冊、これ見て仕上げる
しかありません。やっと再就職して、よこされたのがこの仕事。
試用期間中だし、だれもウエブの事は知りません。
やるしかありません。

362 名前:nobodyさん mailto:sage [2011/12/10(土) 08:57:02.65 ID:???]
>>361
それと、Perlになんの関係が?

363 名前:nobodyさん mailto:sage [2011/12/10(土) 09:12:56.68 ID:???]
>>362
何がわからないのか、わかっていないやつだな。

364 名前:nobodyさん mailto:sage [2011/12/10(土) 09:49:06.29 ID:???]
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /

365 名前:nobodyさん mailto:sage [2011/12/10(土) 16:44:40.44 ID:???]
最近では、広告も電子化されてしまい、チラシといっても
なかなか通じません。

チラシの裏エディタを紹介しておきますね。
(私も愛用しています)

ttp://yuukiremix.s33.xrea.com/chirashi/

>>361
たぶん、それはくびっていう意味だと思うけど。

366 名前:nobodyさん [2011/12/10(土) 17:53:31.12 ID:bJAhMBsm]
Perl CGIで、
WEBページにラジオボタン、チェックボックスを配置して、
保存ボタンで各項目のチェック状態をDBに保存して、
次回ページを表示するときに、前回のチェック状態を再現させたいのです。

DBに保存まではできたのですが、ラジオボタンとかのチェック状態を設定するにはどうやればいいのでしょうか?

367 名前:nobodyさん mailto:sage [2011/12/10(土) 18:04:10.96 ID:???]
>>366
ラジオボタンやチェックボックスなら該当するinput要素に、
checked="checked"
ってすればいいとおもいます。



368 名前:nobodyさん [2011/12/10(土) 18:14:29.61 ID:bJAhMBsm]
>>367
HTMLのコードを出力する時に
if (checked) {
print <input type="radio" checked="checked">
else {
print <input type="radio">
}
とかやるってことですか?
数が多くてすごい大変なんだけど、これ普通のやり方なのかな

369 名前:nobodyさん [2011/12/10(土) 18:16:11.86 ID:phxklYwZ]
>>366

どんだけ馬鹿なの?消えろ

おおwwwwだっせーーーーーーーwwwwwwwwwwwwww

そんなチェック状態とか簡単に考え付くだろwwwwwwww
引き継げばいいだけなのにwwwwwwwwwww
頭悪すぎ

自分=ウサギ
お前ら=カメ

まじまだまだ寝てても平気みたいだね

370 名前:nobodyさん [2011/12/10(土) 18:18:06.55 ID:phxklYwZ]
こいつらがやってること全部できる

低レベルすぎる

やっぱりセンスが違うんだなあ

371 名前:nobodyさん mailto:sage [2011/12/10(土) 18:23:07.58 ID:???]
>>368
ヒアドキュメントに変数埋めといて、該当箇所だけにchecked="checked"が展開されるようにするとか、
input要素はループで生成するようにしておいて、if文減らすとか、とか、

372 名前:nobodyさん mailto:sage [2011/12/10(土) 18:27:04.72 ID:???]
保守性とるなら、配列かハッシュにラジオボタンやチェックボックスに必要な内容を入れといて
ループで処理かなぁ。

373 名前:nobodyさん mailto:sage [2011/12/10(土) 21:39:06.91 ID:???]
.emlからbase64の部分だけ正規表現で抽出する方法ってありますでしょうか?

374 名前:nobodyさん mailto:sage [2011/12/10(土) 22:10:18.53 ID:???]
あります。

375 名前:nobodyさん mailto:sage [2011/12/11(日) 11:50:08.36 ID:???]
えっ

376 名前:nobodyさん mailto:sage [2011/12/11(日) 12:15:53.32 ID:???]
なり

377 名前:nobodyさん mailto:sage [2011/12/11(日) 16:38:26.87 ID:???]
>>361
Perlでやれって言われたの?
今から短時間で実装するならPHPしかないんじゃないの。
Perlでテンプレートエンジンとウェブアプリケーションフレームワークの環境構築とかしてる時間はたぶんないんでしょう?



378 名前:nobodyさん mailto:sage [2011/12/12(月) 10:19:09.76 ID:???]
>>373
どなたか具体的な方法をお願いしますです

379 名前:nobodyさん [2011/12/12(月) 11:29:18.56 ID:8Y5nZNmR]
本文なのか添付なのか、plainなのかhtmlなのか・・・
質問がざっくばらんすぎなのでは?

380 名前:nobodyさん mailto:sage [2011/12/12(月) 12:26:49.55 ID:???]
ざっくばらんの使い方おかしくね?
アバウトすぎるとでも言いたいんだろうけど

381 名前:nobodyさん mailto:sage [2011/12/12(月) 14:15:46.02 ID:???]
ページにアクセスすると、POSTじゃない認証(Basic認証?)を使って表示されるページってありますよね
そのページをperlで取得しようと思っています。
ですが何度やっても401が帰ってくるばっかりでまったく進展しない・・・
#!/usr/local/bin/perl
$|=1;
print "Content-type: text/html\n";
print "\n";

#*一度authorization_basicでやってみました。*
#*他のサイトではうまくいったのですが 目的のサイトでは動作しなかった為*
#*ntlmを試しています*
use LWP::UserAgent;
use HTTP::Request::Common;

my $url = '認証が必要なURL';
# Set up the ntlm client and then the base64 encoded ntlm handshake message
my $ua = new LWP::UserAgent(keep_alive=>1);
# $ua->credentials('ホスト:80', '', "???\\ID", 'パスワード');
$request = GET $url;
print "--Performing request now...-----------<br>\n";
$response = $ua->request($request);
print "--Done with request-------------------<br>\n";
if ($response->is_success) {print "It worked!->" . $response->code . "<br>\n"}
else {print "It didn't work!->" . $response->code . "<br>\n"}

????の部分に思い当たる物が無いので ????\\を消して見てもだめでした。
どういった動きをしているのか、またなぜ失敗しているのかも負えず・・・困っています
宜しくお願いします

382 名前:nobodyさん [2011/12/12(月) 18:29:36.74 ID:8Y5nZNmR]
Google さんで 「LWP::UserAgent ベーシック認証」 でググると、一番上に出てくるんだけどね。
ちゃんと調べろよカス。



use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'www.example.com/secret.html');
$req->authorization_basic('fuga', 'hoge'); # 'ID', 'PASS'
my $res = $ua->request($req);

あと credentials はダイジェスト認証用じゃないかなと。
ベーシック認証なら authorization_basic を使う。
「ダイジェスト認証 領域名」 でググれば、知識も深まるかと思います。


ちなみに、僕は HTTP::Request::Coomon を使って $req = GET('www.example.com/secret.html'); って
やる方が好きです。

383 名前:nobodyさん mailto:sage [2011/12/12(月) 18:48:35.31 ID:???]
>>382
どうもありがとう御座います
やってみましたが401が帰ってきました・・・

何でなんだろう?
WWW-AuthenticateにはNegotiateとNTLMって出てるのにorz

384 名前:nobodyさん mailto:sage [2011/12/12(月) 19:57:09.04 ID:???]
NTLM ・・・ Windows認証か ・・・
perldoc.jp/docs/modules/libwww-perl-5.813/LWP/Authen/Ntlm.pod
領域名の部分をちゃんと指定すれば、最初のコードで認証できるかと。
とりあえずサーバーにIISを使ってるなら、そう書いた方が良いと思う。


385 名前:nobodyさん mailto:sage [2011/12/12(月) 20:04:00.94 ID:???]
>>384
すみませんサーバー側でIISを使ってるのかどうか 確認はしたのですが、確かではないのでorz
perlのコーディングとは違う質問で申し訳ありませんが、領域名っていうのはいったい何を指定すれば・・・
クライアント側で調べて分かる物なんでしょうか

386 名前:nobodyさん mailto:sage [2011/12/12(月) 20:39:55.27 ID:???]
認証の設定をするときに、サーバー側で設定するもの。

387 名前:nobodyさん mailto:sage [2011/12/13(火) 01:38:11.67 ID:???]
>>380
>>379は日本語がざっくばらんなんですな



388 名前:nobodyさん mailto:sage [2011/12/15(木) 18:36:11.15 ID:???]
Spreadsheet::WriteExcel でエクセルファイルを出力しています。
セルはAからZ列があってそこから先はAA,AB,ACと続くのはご存知だと思います。
このアルファベットを数字に対応させたいと思ってますがアイディアがでませんのでどなたかご教示くださいませ。
1→A ,2→B,26→Z まではできるのですが( chr($_ + 0x60) )、27→AA,28→AB 以降をどうするかがわからないのです。
よろしくお願いいたします。

389 名前:nobodyさん mailto:sage [2011/12/15(木) 19:08:41.22 ID:???]
$c=q{z};print++$c

390 名前:388 mailto:sage [2011/12/15(木) 19:27:18.02 ID:???]
すいません、説明が不足してました。申し訳ございません。
数字が26なら一発でZに、28なら一発でABに変換したいのです。

391 名前:nobodyさん mailto:sage [2011/12/15(木) 20:03:59.53 ID:???]
再帰処理するサブルーチンでも作れば?

392 名前:nobodyさん mailto:sage [2011/12/15(木) 20:45:17.94 ID:???]
sub convert {
my $n = shift;
my $al = shift || '';
return $n > 0 ? convert(int(($n - 1) / 26), chr(0x41 + ($n - 1) % 26) . $al) : $al;
}
print convert(28); #=> 'AB'

393 名前:388 mailto:sage [2011/12/15(木) 20:50:09.96 ID:???]
>>392
完璧です。
ありがとうございました。

394 名前:nobodyさん mailto:sage [2011/12/15(木) 21:08:20.48 ID:???]
>>388
Spreadsheet::WriteExcel って、行・列ともに数値で指定できなかったっけ?

search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.37/lib/Spreadsheet/WriteExcel.pm#Cell_notation

395 名前:nobodyさん mailto:sage [2011/12/16(金) 07:33:02.00 ID:???]
ムダナナヤミダッタトイウオチカ

396 名前:nobodyさん [2011/12/31(土) 11:42:50.17 ID:uq+4+jAH]
Perlにかぎったはなしではないのですが、

cgiに送るデータを
index.cgi?user=foo
ではなく、例えば
favstar.fm/tweets/popular
のようにディレクトリ風に送って
CGI側で受け取るにはどうすれば良いんでしょうか?

397 名前:日系アメリカ人 ◆japYJPNx6A mailto:sage [2011/12/31(土) 11:53:18.05 ID:???]
ディスパッチ



398 名前:nobodyさん mailto:sage [2011/12/31(土) 11:54:05.80 ID:???]
PATH_INFO

399 名前:nobodyさん mailto:sage [2011/12/31(土) 16:07:44.64 ID:???]
>>398
ありがとうございます!

400 名前:nobodyさん [2011/12/31(土) 17:34:33.56 ID:ELwS00/V]
www.nicovideo.jp/watch/sm16573796

401 名前:nobodyさん [2012/01/02(月) 00:05:58.15 ID:xN/cFjEo]
datファイルの中に書いてあるパスワードと一致した場合にページを表示させたいのですが
以下のソースでコマンドプロントから入力しても必ず失敗してしまいます

エラーはなく、perl -cw を使ってもOKになり問題はありませんでした

$datfile = "./add.dat";

open(DAT,"+< $datfile");
flock(DAT, 2);

$lock = <<"EOD";
<html><head><title>ページ</title></head>
<body>認証許可</body></html>
EOD

$line = <STDIN>;

chomp($line);

if ($line eq <DAT>) {
print "$lock";
}
else {
print "認証失敗";
}

close(DAT);

datファイルの中身は「t」という一文字が入っています
詳しい方、教えてください

402 名前:nobodyさん mailto:sage [2012/01/02(月) 00:34:00.94 ID:???]
$datfile の1行目に改行があるとかじゃないの?

print によるデバッグがしやすいから、面倒でも最初は変数に入れるクセをつけてみると良いかも。


403 名前:nobodyさん mailto:sage [2012/01/02(月) 07:39:45.76 ID:???]
まず use strict しろよ

404 名前:nobodyさん mailto:sage [2012/01/02(月) 09:01:46.53 ID:???]
あとコマンドプロントじゃなくてコマンドプロンプトな。

405 名前:nobodyさん mailto:sage [2012/01/02(月) 09:19:16.84 ID:???]
<DAT>からの入力をchompしてないからじゃね?

406 名前:nobodyさん mailto:sage [2012/01/03(火) 02:35:21.75 ID:???]
あまりに下らないミスすぎて、恥ずかしすぎてお礼も言えないってか?

407 名前:nobodyさん mailto:sage [2012/01/03(火) 08:07:23.54 ID:???]
お礼が欲しいなら2ちゃんねる以外でやれ



408 名前:nobodyさん mailto:sage [2012/01/03(火) 08:39:34.48 ID:???]
>>407
うるせえカス

409 名前:nobodyさん mailto:sage [2012/01/03(火) 08:59:10.49 ID:???]
罵倒されるのが嫌なら2ちゃんねる以外でやれw

410 名前:nobodyさん mailto:sage [2012/01/03(火) 11:26:01.27 ID:???]
まあコマンドプロントじゃしょうがないか

411 名前:nobodyさん mailto:sage [2012/01/03(火) 11:59:37.15 ID:???]
プロントにパスタでも食いにいくか。

412 名前:nobodyさん mailto:sage [2012/01/04(水) 19:27:09.19 ID:???]
Webブラウザで表示された内容を取得しようと思ったのですが、
私が欲しい情報はJavaScriptにより出力されたものであるために、
単純にPerlを用いただけでは難しいと分かりました。
どのように対処すれば、JavaScriptの表示部分を取得できるのでしょうか?
よろしくお願いいたします。

413 名前:nobodyさん mailto:sage [2012/01/04(水) 22:01:40.66 ID:???]
サーバーで javascript を走らせるフレームワークがあったような気がする

414 名前:nobodyさん mailto:sage [2012/01/05(木) 01:03:58.26 ID:???]
spidermonkeyとか?js読めばどこに通信して何をしてるか分かるから、js無くてもいけると思うけど。

415 名前:nobodyさん mailto:sage [2012/01/05(木) 01:39:51.36 ID:???]
Ajax で表示してるなら、firefox での拡張で HTTP 通信を覗けるのがあるから、
それで見張ればいい。

firefox 入れなくない!っていうなら snooper で見ればいい。

416 名前:nobodyさん mailto:sage [2012/01/05(木) 22:01:42.38 ID:???]
急にPerlでCGIプログラムをやることに。
みなさんIDEは何をお使いですか?

今んとこ慣れないEclipseでやろうと
思ってます。

417 名前:nobodyさん mailto:sage [2012/01/05(木) 22:27:56.90 ID:???]
Perlを始めとした動的言語では
コード補完もリファクタリングもヘルプも
中途半端にしかならないからIDEは重いだけだよ。



418 名前:nobodyさん mailto:sage [2012/01/05(木) 22:34:01.35 ID:???]
テキストエディタのみ

最近はブロックの折り畳みとかあるんで、充分強力

419 名前:nobodyさん mailto:sage [2012/01/05(木) 22:54:26.32 ID:???]
IDEに助けてもらおうと思ったんですが
効果が薄いようですね。
腹くくってエディタでやります。

420 名前:nobodyさん mailto:sage [2012/01/06(金) 02:05:15.33 ID:???]
各個人のポリシー次第。なのかもしれませんが、質問です。

モジュール ( .pm) を作ったときって、何かエラーが合った場合に
die でスクリプトを止めてしまってエラーを通知するべきか、
それとも STDERR にエラーを出力しつつスクリプトは止めないようにするべきか、
どちらがオススメのコーディングの仕方なんでしょう?

421 名前:nobodyさん mailto:sage [2012/01/06(金) 02:11:20.73 ID:???]
男は黙ってcroak

422 名前:nobodyさん mailto:sage [2012/01/06(金) 03:13:39.39 ID:???]
>>420
してほしい事をやらせて
してほしくない事をやらせなければよい。

423 名前:nobodyさん mailto:sage [2012/01/07(土) 06:25:16.35 ID:???]
>>421
croak が分からなかったので調べてみた。
呼び出し元が分かる die か。なるほど。
ワーニングには carp か。


ありがとう!



>>422
根本的に文章が読みとれてないですよ。


424 名前:nobodyさん mailto:sage [2012/01/07(土) 12:06:24.49 ID:???]
>>423
> 根本的に文章が読みとれてないですよ。
俺は422ではないが、そっくりそのままお返しする。

425 名前:nobodyさん mailto:sage [2012/01/07(土) 13:19:20.03 ID:???]
420は2択を迫っているが、422は場合によるといっていて、その場合についての説明もしている。
422が正解だと思うが。


426 名前:nobodyさん mailto:sage [2012/01/12(木) 05:19:37.52 ID:???]
どうすんのがいいのか聞いてんのに場合によりけりとしたり顔で言われたら脱力する
420は場合によりけりということがわかった上で、基本的なスタンスはどっちがいいか聞いてんじゃないの?

俺はプロセス殺すなー
変な値入ってんのに処理続けても意味ないし
warnなんてデバッグでしか使ったことないや

427 名前:nobodyさん mailto:sage [2012/01/12(木) 12:02:21.96 ID:???]
>>426
おまえも読解能力の欠陥持ちか。
「場合によりけり」では結局何も答えてないに等しいが、>>422はそんなこと書いてないだろ。
どういう時にどっちを選択すればいいかが簡潔に書いてあるだろ。



428 名前:nobodyさん mailto:sage [2012/01/14(土) 02:03:55.49 ID:???]
time_tが32bitか64bitかを調べる方法はありますか?
2038年1月19日3時14分7秒以降のUNIX時間を取得してみるよりスマートな方法で。

学校の宿題でカレンダーを作ったら2038年2月でずれちゃいました。

429 名前:nobodyさん mailto:sage [2012/01/14(土) 05:41:58.49 ID:???]
overflow 日付は分かってるんだから、最大値+1を与えた時に
日付がどうなってるか確かめればよい

430 名前:nobodyさん mailto:sage [2012/01/14(土) 10:28:47.22 ID:???]
> 2038年1月19日3時14分7秒以降のUNIX時間を取得してみる

これで充分スマートじゃないか?


431 名前:nobodyさん mailto:sage [2012/01/14(土) 12:11:45.71 ID:???]
俺に言わせれば、time_tが32bitか64bitかなんて重要な問題じゃないね。
本当に知りたいことは、2038年1月19日3時14分7秒以降が扱えるかだろう? (キリッ)

432 名前:nobodyさん mailto:sage [2012/01/14(土) 12:21:34.67 ID:???]
ぶってぇ釣り針垂らしやがって・・・

433 名前:nobodyさん mailto:sage [2012/01/14(土) 15:29:38.07 ID:???]
つーか「これは仕様です」で十分でしょ、実際仕様なんだから。
年が4桁で有限なのと同じでしょ。

434 名前:nobodyさん mailto:sage [2012/01/14(土) 15:46:35.43 ID:???]
・Perl 5.12 以降を使う
・Time::y2038 モジュールを使う
・DateTime モジュールを使う
のどれかで解決

435 名前:nobodyさん mailto:sage [2012/01/14(土) 16:24:02.91 ID:???]
他の人の労力で解決っているのは、仕事ではそうすべきだけど、
"トレーニング" である宿題ではそうすべきではない。むしろ
time_t にさえ依存せず、自力で10桁年カレンダーのような無駄
なものを作って自分自身の糧とすべし。

436 名前:nobodyさん mailto:sage [2012/01/14(土) 18:04:47.99 ID:???]
>>435
その考え方は賛成できるけど、このスレ的には「車輪の再発明」って言われちゃうんだよね〜 orz


437 名前:nobodyさん mailto:sage [2012/01/14(土) 18:26:43.69 ID:???]
じゃあ、トレーニングだ。

自分で考えろ。こんな所聞くな。
他の人の労力で解決すんな。



438 名前:nobodyさん mailto:sage [2012/01/14(土) 21:36:35.23 ID:???]
車輪の再発明はいいんだけど、大抵は独学のトホホなプログラムができあがあるから、せめて一度
既存モジュールの中身を読んでくれ。

439 名前:nobodyさん mailto:sage [2012/01/14(土) 23:37:55.97 ID:???]
先生のために宿題をするのか、自分のために宿題をするのか違い。

440 名前:nobodyさん mailto:sage [2012/01/15(日) 20:18:01.72 ID:???]
単位のためだろ

441 名前:nobodyさん mailto:sage [2012/01/15(日) 20:45:40.76 ID:???]
そういうの全く理解できないんでごめんな

442 名前:nobodyさん mailto:sage [2012/01/18(水) 21:06:05.29 ID:???]
元ファイルの内容を書き換えて別ファイルに保存する方法を教えてください。
元ファイル aaa.txt
変換プログラム trans.cgi
変換後のファイル bbb.txt

aaa.txt に書いてある「あ$kanaお」を読み込んで
trans.cgi にて$kana = きくけ; として変換し
bbb.txt に「あきくけお」で出力するには、どうしたらいいのでしょうか。

open関数で +< という読み書きでファイルを開いても
空テキストが作成されるだけで、うまくいきません。
どうかよろしくおねがいします。

443 名前:nobodyさん mailto:sage [2012/01/18(水) 21:27:56.62 ID:???]
open(my $infh, ?<:utf8?, ?input.txt?);
open(my $outfh, ?>:utf8?, ?output.txt?);
while(my $line = <$infh>){
  〜処理〜
  print $outfh $line;
}
close($outfh);
close($infh);

444 名前:nobodyさん mailto:sage [2012/01/18(水) 22:19:08.77 ID:???]
>>442
perldoc.jp/docs/perl/5.10.1/perlfaq5.pod

my %var = (FOO => 'bar');
open my $fh, '+<', $file or die $!;
read $fh => my $text, -s $fh;
$text =~ s/__([A-Z]+)__/$var{$1}/g;
seek $fh, 0, 0;
print $fh $text;
truncate $fh, tell;
close $fh;

open my $sfh, '<', $src_file or die $!;
open my $tfh, '>', $tmp_file or die $!;
while (<$sfh>) {
  s/__([A-Z]+)__/$var{$1}/g;
  print $tfh $_;
}
close $tfh and close $sfh or die $!;
rename $tmp_file => $src_file or die $!;

445 名前:442 mailto:sage [2012/01/18(水) 22:35:01.78 ID:???]
>>443さん
>>444さん

お返事ありがとうございました。
じっくり読んで頑張ってみたいと思います


446 名前:nobodyさん [2012/01/25(水) 02:08:42.13 ID:8GsK3GVU]
ファイルの置換について質問させてください。
コマンドラインから、
echo "test.txt" | xargs perl -pi -e 's/hoge/HAGE/g'
とすると正しく置換されるのですが、
ブラウザからapacheをとおして、スクリプト内で上記のコマンドを、
`echo "[フルパス]test.txt" | xargs perl -pi -e 's/hoge/HAGE/g'`

system "echo ¥"[フルパス]test.txt¥" | xargs perl -pi -e 's/hoge/HAGE/g'"
とするとうまく置換されないのはなぜでしょうか?
またこのケースですとスクリプト内での記述はどのようにするのが適切でしょうか?宜しくお願い致します。



447 名前:nobodyさん mailto:sage [2012/01/25(水) 03:35:55.61 ID:???]
CGI実行時のユーザ権限は
そのユーザ権限でファイルや当該ディレクトリは書き込み可能になっているか
をまずチェック。



448 名前:nobodyさん [2012/01/25(水) 03:57:31.07 ID:Arlh9fb/]
447さん
お返事ありがとうございます。ディレクトリとファイルは権限777にして試してみたのですが、
置換されませんでした。あとスクリプト中の文字のエスケープ漏れもみなおしてみたのですが、
結果変わらずでした。さらに調べてみます。ありがとうございます。

449 名前:nobodyさん mailto:sage [2012/01/25(水) 04:06:26.93 ID:???]
どう出来ないのか
エラーは出てないのか
端末でスクリプトを走らせたらどうなるか

450 名前:nobodyさん mailto:sage [2012/01/25(水) 08:23:33.82 ID:???]
Apacheのerrorログを見てみる ←基本

451 名前:nobodyさん mailto:sage [2012/01/28(土) 22:01:51.13 ID:???]
errorログを見て特に問題はないと思っていたら...

sendmailのログでしたorz←

452 名前:nobodyさん mailto:sage [2012/01/29(日) 11:48:32.08 ID:???]
コマンドラインやめてopen(FILE,"[フルパス]test.txt")しちゃいなよ

453 名前:nobodyさん mailto:sage [2012/01/31(火) 17:42:02.72 ID:???]
質問質問!
&sub1(qq(asdasdqwdasdasd));
sub sub1
{
while($_[0] =~ /asd/gs )#←@
{
print $_[0];#←@でマッチした中身を出力したいが、subの引数
}
}
こんな感じのプログラムを作ったのですが
$_[0]の中身が更新できなくて困っています・・・
どなたか回避する方法を教えてください!お願いします

454 名前:nobodyさん mailto:sage [2012/01/31(火) 17:56:37.52 ID:???]
/asd/gs
 ↓
/(asd)/gs


あとついでに書き直した。

sub1(qq(asdasdqwdasdasd));
sub sub1{
 my $str = shift || '';
 while($str =~ /(asd)/gs){
  print $1;
 }
}

慣れてくれば良いけど、初心者であるうちは $_ をそのまま使わずに関数内で変数を用意して
そこへ格納したほうがいいよ。


455 名前:nobodyさん mailto:sage [2012/01/31(火) 18:23:59.58 ID:???]
>>454
2つほど質問があるのですがいいですか!

456 名前:nobodyさん mailto:sage [2012/01/31(火) 18:26:09.85 ID:???]
お礼を書くのを忘れていました
>>454 さん ありがとう御座います。

457 名前:nobodyさん mailto:sage [2012/01/31(火) 18:52:11.00 ID:???]
don't ask to ask



458 名前:nobodyさん mailto:sage [2012/01/31(火) 21:02:02.01 ID:???]
CGIのデータベースを運用しています。

auの端末で検索できるものとできない機種があります。
同じ2009年にでたモデルでもできるできないがあります。
例えばCA002はできるけど、K002はだめ。

できないものは、何も検索フォームに入れないで検索してもダメです。

Jcode.pl 2.13でエンコードしてますが、
これが悪いのでしょうか?

どうしたら、文字検索をできるようにできますか?



459 名前:nobodyさん mailto:sage [2012/01/31(火) 21:33:09.50 ID:???]
>>458
携帯サイトのWebプログラムを語ろう Part3
kohada.2ch.net/test/read.cgi/php/1232544986/

460 名前:nobodyさん mailto:sage [2012/01/31(火) 22:38:52.20 ID:???]
表示してる文字コードはなにか

端末が送ってきてる文字コードは本当に希望したものか


461 名前:nobodyさん mailto:sage [2012/01/31(火) 22:46:58.04 ID:???]
>>460
Shift_JISです。

462 名前:nobodyさん mailto:sage [2012/01/31(火) 22:57:27.90 ID:???]
utf-8 で書きませう

463 名前:nobodyさん mailto:sage [2012/01/31(火) 23:06:58.71 ID:???]
Jcode.pmの好きなおいらがアドバイスしにやってきたょミ☆
初心者スレだしねミ☆

464 名前:nobodyさん mailto:sage [2012/01/31(火) 23:43:18.05 ID:???]
>>462
邪悪なutf-8イラネ

465 名前:nobodyさん mailto:sage [2012/02/01(水) 00:41:51.19 ID:???]
たしかに utf-8 はマッピングミスとかあるけど、
他からデータを持ってきたりとかしない場合には utf-8 で問題無い。


466 名前:nobodyさん mailto:sage [2012/02/01(水) 01:42:35.88 ID:???]
Shift_JIS vs UTF-8 のゴングが今、スレ内に鳴り響きました!

467 名前:nobodyさん mailto:sage [2012/02/01(水) 04:46:09.17 ID:???]
まずはアクセスログと標準入力に何が渡されたかを見る。



468 名前:nobodyさん mailto:sage [2012/02/01(水) 06:04:45.99 ID:???]
>>466
プログラム板でやれ

469 名前:nobodyさん mailto:sage [2012/02/01(水) 23:55:30.88 ID:???]
続きはSJIS板で

470 名前:nobodyさん mailto:sage [2012/02/03(金) 01:56:38.79 ID:???]
cp932板はありますか?

471 名前:nobodyさん mailto:sage [2012/02/03(金) 02:11:46.79 ID:???]
あるよ

472 名前:nobodyさん mailto:sage [2012/02/04(土) 02:53:54.65 ID:???]
LWP::UserAgent で指定 URL をアクセスして、リダイレクトされた際に実際にアクセスした URL を知るにはどうしたら良いでしょうか?

header('Location') で調べれば良いと思ったものの、リダイレクトされた後には Location ヘッダは無く、
max_redirect(0) でリダイレクトさせなければ Location ヘッダを取得できて、リダイレクト先を知ることは出来ました。

max_redirect(0) でアクセスして、Location ヘッダがあれば max_redirect(1) とかにしてアクセス。
リダイレクトが1回で済まなければ max_redirect(2) でアクセスしてみる。

と言ったことをやってるのですが、これが非常に面倒なので結果的にアクセスした URL が取得できればと考えて質問させていただきました。

473 名前:nobodyさん mailto:sage [2012/02/04(土) 03:45:11.91 ID:???]
>>472
response_done ハンドラか response_redirect ハンドラに URL を記録する処理を追加する。
search.cpan.org/dist/libwww-perl/lib/LWP/UserAgent.pm#Handlers

474 名前:nobodyさん mailto:sage [2012/02/04(土) 09:09:19.56 ID:???]
んなことしなくても、
HTTP::Response オブジェクトは使われた HTTP::Request オブジェクトを丸々保持してるし、
リダイレクト前の Response も previous メソッドでたどれる。

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->get("t.co/hog7vmt5");
do { print $res->request->uri, "\n"; } while ($res = $res->previous);
__END__
www.asahi.com/national/update/0204/TKY201202030789.html
t.asahi.com/5gxs
t.co/hog7vmt5

475 名前:473 mailto:sage [2012/02/04(土) 09:40:24.08 ID:???]
>>474
成程、そっちをみれば良かったのか。勉強になったよ。

use LWP::UserAgent;
my $r = LWP::UserAgent->new->get('t.co/hog7vmt5');
print map $_->request->uri . "\n", $r->redirects, $r;
__END__
t.co/hog7vmt5
t.asahi.com/5gxs
www.asahi.com/national/update/0204/TKY201202030789.html

476 名前:nobodyさん mailto:sage [2012/02/04(土) 16:24:03.95 ID:???]
>>473-475
自分には >>474 さんの書き方がしっくりきたので、
これでいこうと思います。
ありがとうございました。



どうでもいい事だけど・・・
do{ }while( ) ってあまり好きじゃないw
ループの条件式が後に来るってーのが、なんか馴染めない (^-^;

477 名前:nobodyさん mailto:sage [2012/02/05(日) 04:49:54.12 ID:???]
>>476
> do{ }while( ) ってあまり好きじゃないw
> ループの条件式が後に来るってーのが、なんか馴染めない (^-^;

その方が都合のいいケースもたまにあるでしょ。
最低1回は処理が必要、って時が。たまにね。



478 名前:474 mailto:sage [2012/02/05(日) 10:00:34.05 ID:???]
動作というより記法について言ってるのでは。
特にブロックの中身が複数行のときは最後の while を見るまでループだってことがわからんのが痛い。
あとまあ、動作も実際気持ち悪い。本物のループブロックじゃないから next とか使えんし。
まともに書く時はちょっと記述増えることになっても普通の while と last とかを組み合わせるほうがいい。

479 名前:nobodyさん [2012/02/06(月) 18:29:54.91 ID:ryr2jQRg]
Perlによるネットワークプログラムの質問です。
Perl でアクセスしたいサイトがあるのですが、Perlからhtmlを読むことが出来ません。
IE8の「ソースを表示」では表示できるのですが。

アクセスしたいサイト :cinema.pia.co.jp/
Perlのスクリプトの場所 :x68000.q-e-d.net/~68user/net/sample/http-client-2.pl
その説明 : x68000.q-e-d.net/~68user/net/http-3.html

【実行結果】
perl http-client-2.pl -GET cinema.pia.co.jp/
HTTP/1.1 200 OK
Date: Mon, 06 Feb 2012 09:25:43 GMT
Server: Apache
Last-Modified: Fri, 28 Aug 2009 06:41:24 GMT
ETag: "304a0-2-f9082d00"
Accept-Ranges: bytes
Content-Length: 2
Connection: close
Content-Type: text/html

1

で終わってしまい、肝心のHTMLのBODYの部分を表示する事が出来ません。
どなたか分かる方教えてください。

480 名前:nobodyさん mailto:sage [2012/02/06(月) 20:02:58.69 ID:???]
LWP 使えば?

481 名前:nobodyさん mailto:sage [2012/02/06(月) 20:18:45.51 ID:???]
>>480
オレもLWP使うに1票

482 名前:nobodyさん mailto:sage [2012/02/06(月) 22:10:48.93 ID:???]
wget使えば?

483 名前:nobodyさん mailto:sage [2012/02/06(月) 22:53:24.14 ID:???]
一度やってみたかったのでtelnetにコマンドを流し込みます。
覚えるともう、病みつきです。ftpもこれでやってます。
sendmailだって大丈夫です。

484 名前:479 [2012/02/07(火) 01:13:45.57 ID:eo0HNsOB]
>>479 です。返信ありがとうございます

>>480 >>481
LWP 使ってみました。www.sea-bird.org/doc/Solaris8/Perl_4.html
出来ました
>>482
wget をPerlから?使う方法が分かりませんでした。コマンドとして使うという事なら目的と違います
>>483
上記チュートリアルサイトにて telnet も試しましたが、駄目でした


実は本当にやりたいことは別にあったので、すみませんが質問をやり直させてください

このサイトは、映画レビューサイトなのですが、
cinema.pia.co.jp/user/xxxxx/imp/all/ (xxxxxは数字)
にて、各ユーザーのレビュー一覧を見る事が出来ます
(実は自分のレビューを抽出したいだけです)
しかし、Perlからのアクセスでは、LWPを使ってもここではじかれてしまいます
(IE8の「表示→ソース」では見れるが、Perlにprintさせると違うものになっている)

どなたか原因分かりますでしょうか?

485 名前:nobodyさん mailto:sage [2012/02/07(火) 01:25:44.20 ID:???]
「違うもの」が何だか分からないけど、ユーザーエージェントをIEにしてみたら?

486 名前:nobodyさん mailto:sage [2012/02/07(火) 01:48:21.80 ID:???]
>>484
use LWP::UserAgent;
use HTTP:Request::Common;
my $ua = LWP::UserAnget->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)');
my $req = GET('cinema.pia.co.jp/user/xxxxx/imp/all/');
my $res = $ua->request($req);
if(open(my $outfh, '>', 'debug.html')){
print $outfh $res->content() || '';
close($outfh);
}


487 名前:479 mailto:sage [2012/02/07(火) 03:24:39.22 ID:???]
>>479 です。ありがとうございます

>>485 駄目でした。ソースの190行目辺りからが違ってきます
上手くいく時は、以下のようになります。良く分かりませんが。
<div id="mainImpMain">
<form method="get" class="common">
<ul class="pagedLink">

>>486
出来ました。ありがとうございました。



488 名前:nobodyさん mailto:sage [2012/02/07(火) 23:59:17.86 ID:???]
>>487
何がだめだったのか、ちゃんと理解できてる?

489 名前:nobodyさん mailto:sage [2012/02/08(水) 00:00:54.11 ID:???]
HTTP ヘッダに独自のヘッダを付加しようとしてるんですけど、
自分自身が呼ばれて起動された際の HTTP ヘッダってどうやって確認するのでしょうか?

use CGI の header はヘッダを出力するためのものっぽいし・・・

490 名前:nobodyさん mailto:sage [2012/02/08(水) 00:27:39.96 ID:???]
>>489
それはあんたのスクリプトがどうやって呼び出されているかによる。
httpd に Apache を使ってて CGI 経由で呼び出されているなら
Apache のマニュアルと CGI の仕様書を読んでくれ。
httpd.apache.org/docs/
www.studyinghttp.net/rfc_ja/rfc3875

あと HTTP の仕組みもきちんと理解してくれ。
www.studyinghttp.net/rfc_ja/rfc2616

491 名前:nobodyさん mailto:sage [2012/02/08(水) 00:51:03.57 ID:???]
HTTP ヘッダの理解を深める為にマニュアルや RFC を求めてるんじゃなくて、
自身のスクリプトが呼ばれた際の HTTP ヘッダを得る方法を伺っているわけでして・・・


492 名前:479 mailto:sage [2012/02/08(水) 01:09:59.52 ID:???]
>>488
目的のスクリプトは書けたのですが、気持ち悪いので知ってるなら教えてもらえますか?


493 名前:nobodyさん mailto:sage [2012/02/08(水) 04:36:08.44 ID:???]
「教えてもらえますか?」

最近の若い奴は、物事の尋ね方も知らないのか?ブツクサブツクサ

494 名前:nobodyさん [2012/02/08(水) 07:53:34.31 ID:D9+63/xk]
<!-- link -->から<!-- /link -->までのタグ内に存在するURLとその行の「〜」で囲まれてる部分を
抜粋するようなプログラムを作成したいと思います。

例えば、次のような文章があった場合、
------------------------------------
ほげほげふがふが
example.com/hogehoge1
ほげほげふがふが
example.com/satitama1/saitama.html
<!-- link -->
リンク一覧
〜テスト〜 example.com/hogehoge2/test.hmtl
〜さいたま〜 example.com/satitama2
東京
<!-- /link -->
------------------------------------
結果は
------------------------------------
<a href="example.com/hogehoge2/test.hmtl">テスト</a>
<a href="example.com/satitama2">さいたま</a>
------------------------------------

のようにしたいのですが、どのように書いたらよいでしょうか?

尚、URLを抜き出す正規表現は次のように書きました。
(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)


環境は、CentOS5 perl5.10です

495 名前:nobodyさん mailto:sage [2012/02/08(水) 10:31:20.53 ID:???]
>>494
perldoc.jp/docs/perl/5.10.1/perlfaq6.pod#How32can32I32pull32out32lines32between32two32patterns32that32are32themselves32on32different32lines63

my $protocol = qr/(?:https?|ftp)/;
my $format = '<a href="%2$s">%1$s</a>' . "\n";
my $text = do { ... };
my @link;
while ($text =~ m{<!-- link -->(.*?)<!-- /link -->}gs) {
  my $links = $1;
  push @link, sprintf $format, $1, $2
    while $links =~ m{〜(.*?)〜.*?($protocol://[!#-;=?-\[\]_a-z~]+)}gos;
}
print @link;

496 名前:nobodyさん mailto:sage [2012/02/08(水) 12:09:45.01 ID:???]
>>493
その割には「お前ら教えろ」で回答貰えたりするけどな2ch

497 名前:nobodyさん mailto:sage [2012/02/08(水) 23:05:10.70 ID:???]
>>496
それはむしろネタとして受け入れられてしまうんだろうなw



498 名前:nobodyさん mailto:sage [2012/02/19(日) 12:41:02.48 ID:???]
私の働きが悪いせいか、私の物はほとんど買ってくれません。
下着は、妻と娘のお下がりです。
おまけに洋式トイレ、便座が上がってるとか、飛沫が飛んでるとか、いちいち五月蝿いんです。
おかげで、トイレは座ってするように強要され、もうブリーフの前、開ける必要が無いんだからと、私達のお下がりで十分でしょう。と、ここ何年も私の物は買ってくれません。
今では開き直って、ブラジャーもしています。
家に居る時は、娘のスカートを穿き、外出は娘のパンツ、ジーンズ穿いていきます。
娘は、始めは困惑していたが今では慣れ、何でも貸してくれます。
妻の洋服、パンツ、スカートはウエストがちょっときつい。
ストレッチの物は、勝手に着ています。

499 名前:nobodyさん mailto:sage [2012/02/19(日) 13:22:18.26 ID:???]
cat >>498 > /dev/null

500 名前:nobodyさん mailto:sage [2012/02/19(日) 15:19:47.97 ID:???]
next if $num == 498

501 名前:nobodyさん mailto:sage [2012/02/19(日) 17:53:14.70 ID:???]
Global symbol "$num" requires explicit package name at >>500 line 1.

502 名前:nobodyさん mailto:sage [2012/02/19(日) 22:33:36.65 ID:???]
どうせなら、>>498 は、そのカキコ内容を perl で記述すべし。

503 名前:nobodyさん mailto:sage [2012/02/20(月) 14:28:00.53 ID:???]
use warnings; use utf8; use Corp; use Family;
my $family = Family->new();
$family->husband('>>498'); $family->wife('百合子(仮)'); $family->daughter('楓(仮)');
my $corp = Corp->new(); $corp->salaryCalculation();
$family->income($family->husband(), $corp->salary());

if($family->income($family->husband()) > 250000){
  # トイレ
  my $toto = Toilet->new();
  $toto->type('EU'); # JA or EU
  my $urine = $family->urine($family->husband()); # 小便をする
  $toto->urine($urine);
  if($toto->is_splash()){ $toto->forced_to_sit(1); } # トイレの用足しには座りを強制
  # 下着
  if($toto->forced_to_sit()){ $family->underwear($family->husband(), $family->underwear($family->wife()); }
  # 他の着衣
  if($family->underwear($family->husband()) eq $family->underwear($family->wife())){
    $family->brassiere($family->husband(), $family->brassiere($family->wife());
    $family->skirt($family->husband(), $family->skirt($family->daughter());
    $family->jeans($family->husband(), $family->jeans($family->daughter());
  }
}else{
  $family->underwear($family->husband(), 'BOXER PANTS');
  $family->brassiere($family->husband(), undef);
  $family->skirt($family->husband(), undef);
  $family->jeans($family->husband(), 'EDWIN');
}

>>498 じゃないけど、これが限界っす><
娘や妻への下着のセットは省いたw

504 名前:nobodyさん mailto:sage [2012/02/20(月) 14:29:13.01 ID:???]
収入がちゃんとある場合の下着で、ブラとスカートはちゃんと undef にしてるところを評価して欲しいですw

505 名前:nobodyさん mailto:sage [2012/02/20(月) 22:20:39.95 ID:???]
わろた

506 名前:nobodyさん mailto:sage [2012/02/21(火) 10:11:33.62 ID:???]
修正
× $corp->salary()
○ $corp->salary($family->husband())

サラリーを得るのに名前を渡してなかった><


× if($family->income($family->husband()) > 250000){
○ if($family->income($family->husband()) < 250000){

不等号の向き間違えたw

507 名前:nobodyさん mailto:sage [2012/02/24(金) 16:30:51.95 ID:???]
初めまして。

RSSのデータから、日付時刻とタイトル、そのリンク先URLを一覧にして取得したいと考えています。

・ブラウザに「取得」ボタンなどを表示し、それをクリックすることで最新の一覧を表示
・以前に取得したものは取得しない

先ずは上記2点を実装したいです。

良い方法や参考サイトなどをご教示頂きたいです。
よろしくお願いいたします。



508 名前:nobodyさん mailto:sage [2012/02/24(金) 17:02:28.77 ID:???]
>>507
>>1-2

こんなCGI探してます 23
kohada.2ch.net/test/read.cgi/php/1219654359/
依頼されたツールを誰かが作るスレ
kohada.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
kohada.2ch.net/test/read.cgi/php/1150508106/
自作CGIを評価するスレ
kohada.2ch.net/test/read.cgi/php/1049514428/
自分の作ったCGIスクリプトをデバッグするスレ
kohada.2ch.net/test/read.cgi/php/1011174442/

kohada.2ch.net/test/read.cgi/php/1036141603/420-435

509 名前:nobodyさん mailto:sage [2012/02/24(金) 17:22:17.71 ID:???]
>>508
最後のスレが役に立ちそうです。ありがとうございます。

510 名前:nobodyさん mailto:sage [2012/02/25(土) 00:54:16.96 ID:???]
なぜマスコミは財務省の犬になるのか?

全国紙では唯一、増税批判の姿勢を取っていた産経新聞に、
昨夏、国税の税務調査が入った。
財務省にとって税務調査は言論統制の最強の武器で、
2009年には朝日、読売が申告漏れを指摘され、
それを機に朝日は増税礼賛へと傾斜し、
読売は財務省幹部の天下りを受け入れた経緯がある。

国税庁という「警察力」は、財務省の最強の武器なのです。
何しろ、徴税というのは「裁量範囲」が広い業務で、
調査官の「判断」により合法とされたり、
脱税とされたりしてしまうのです。
「去年はOKだったのに、今年は何でダメなんだ!」
といった事態は普通に起こります。


511 名前:nobodyさん mailto:sage [2012/02/25(土) 13:09:52.88 ID:???]
眞子様は素敵

まで読んだ

512 名前:nobodyさん mailto:sage [2012/02/27(月) 00:22:44.82 ID:???]
貞子は素敵

まで読んだ

513 名前:nobodyさん mailto:sage [2012/02/27(月) 00:26:08.69 ID:???]
素数

に見えた

514 名前:nobodyさん mailto:sage [2012/02/27(月) 00:46:41.84 ID:???]
素股

515 名前:nobodyさん mailto:sage [2012/02/27(月) 07:22:57.09 ID:???]
眞子様は素股!?

516 名前:nobodyさん mailto:sage [2012/02/27(月) 14:07:22.77 ID:???]
貞操は国家機密事項

517 名前:nobodyさん [2012/02/28(火) 00:06:11.43 ID:0AwG+yg0]
質問なのですがPerlでこういうサイトって作れますか?
ttp://findrjp.com/formen/
これはPHPだと思うんですけど
作るとしたらelsifで作る感じでしょうか?
こういうのってすぐ作れますか?



518 名前:nobodyさん mailto:sage [2012/02/28(火) 00:51:16.58 ID:???]
お前には無理

519 名前:nobodyさん mailto:sage [2012/02/28(火) 00:59:39.36 ID:???]
お前に出来たらチンパンジーでも出来るよ

520 名前:nobodyさん mailto:sage [2012/02/28(火) 01:10:42.34 ID:???]
そうだねelsifさえ使いこなせれば簡単に作れるよ。でもelsifはかなり難しいから頑張ってね。

521 名前:nobodyさん [2012/02/28(火) 01:35:37.84 ID:0AwG+yg0]
皆様生暖かいコメントありがとうございます。
どうせテメーらにはできないんだろwwwww
って挑発したらヒント教えてくれますか?
elsifは分かります

522 名前:nobodyさん mailto:sage [2012/02/28(火) 10:18:18.70 ID:???]
はいはいマルチマルチ。

523 名前:nobodyさん mailto:sage [2012/02/28(火) 14:34:14.89 ID:???]
実行中のスクリプトの場所に関して質問です。

スクリプト中で開くファイルはスクリプトのあるディレクトリのサブディレクトリに置いており、
全てフルパスで開くようにしています。
昨日初めて mod_perl を入れたところ、FindBin $Bin や Cwd が Apache のディレクトリになっています。

$ENV{'SCRIPT_FILENAME'} を使おうかと思ったのですが、デバッグでコンソールで実行することもあるため
$ENV{'SCRIPT_FILENAME'} は使えません。

$0 では cron でも mod_perl でも CGI でもコンソールでも期待する値が得られました。

./hoge.pl で実行して dirname($0) すると ./ 返ると書いてある場所もありますが、当方では
確認できませんでした。

そこで疑問に思ったのが、$0 を 100% 信用してもいいのか? ということです。
「他のプログラムにより強制的に書き換えられる」 という可能性は今は無しでお願いします。


524 名前:nobodyさん mailto:sage [2012/02/28(火) 14:46:37.42 ID:???]
ちょっと勘違いがありました。

$0 は perl に与えられた path みたいですね。
HTTPd とかはフルパスを作って渡してくれてるっぽいけど、
コンソールではそうではない。

むぅ。。。

525 名前:nobodyさん mailto:sage [2012/02/29(水) 01:59:02.18 ID:???]
mod_perl を導入してスクリプトが走るのが軽いからと F5 連打してたら
Not a CODE reference 〜
っていうエラーが出た。
そのエラーが言う行は

main();

としかやってないのに。。。

526 名前:nobodyさん mailto:sage [2012/02/29(水) 11:28:36.69 ID:???]
mod_perlが返すパスも元を追えば$0を元に生成してたと思う

527 名前:nobodyさん mailto:sage [2012/03/02(金) 13:17:08.38 ID:???]
すみません、Web制作板からこちらに飛ばされて来ました。

ユーザーによる新規会員登録後、そのユーザー毎にディレクトリを自動的に生成し、
ユーザディレクトリ毎に容量制限を割り当てたいのですが、可能なのでしょうか?

ディレクトリを自動生成するところまではできています。




528 名前:nobodyさん mailto:sage [2012/03/02(金) 18:09:30.62 ID:???]
ファイルが作成されようとする度に全ファイルサイズを得るか、
quota の導入。
quota を入れるなら、システムに実際にユーザーの作成が必要。

529 名前:nobodyさん mailto:sage [2012/03/03(土) 19:01:18.46 ID:???]
if ( 現在使用サイズ + これから書き出すサイズ < 制限サイズ ) {
 ファイル書き込み
 現在使用サイズを書いたファイルorDBを更新(現在使用サイズ+これから書き出すサイズ)
}

サイズ取得はuse bytes; $data_size = bytes::length($data); かな。

530 名前:nobodyさん mailto:sage [2012/03/03(土) 19:19:52.03 ID:???]
$^0って何でしたっけ。
検索しにくくて、、、、こういうのどうやって探せばいいんでしょう。
perlvarになかったので特殊変数ではないっぽい

531 名前:nobodyさん mailto:sage [2012/03/03(土) 19:27:25.41 ID:???]
何でしたっけと言われても、少なくともPerlにおいては特殊変数ではないしそれ以外の何かの意味もない。

532 名前:nobodyさん mailto:sage [2012/03/04(日) 02:19:05.56 ID:???]
$^O ならOS名なんだけどネ

533 名前:nobodyさん mailto:sage [2012/03/04(日) 12:49:16.62 ID:???]
>>532
そんなのすぐ気づいたしw

534 名前:530 mailto:sage [2012/03/04(日) 17:01:24.24 ID:???]
ありがとうございます、OS名でぐぐったらいろいろ出てきました。
ゼロじゃなくて大文字のオーだったんですね。

OS名ということはシステムからPerlに提供されているものだと思って、%ENVと同じところに記述されているはずって当たりをつけたら
perlvarにありました。

535 名前:nobodyさん mailto:sage [2012/03/04(日) 20:39:47.27 ID:???]
531恥ずかしすぎだなw

536 名前:532 mailto:sage [2012/03/05(月) 05:40:34.80 ID:???]
>>535
そんなことはない。$^0 は確かに特殊変数でもなんでもなかった訳だし。
ためしに$^0をプリントさせたらエラーで実行できなかったし。

537 名前:nobodyさん mailto:sage [2012/03/05(月) 22:13:10.43 ID:???]
だが普通すぐ気づくだろう。



538 名前:nobodyさん mailto:sage [2012/03/06(火) 01:30:36.74 ID:???]
「普通すぐ気づく」なら530の質問は最初からされてない

539 名前:nobodyさん mailto:sage [2012/03/06(火) 01:42:56.66 ID:???]
荒らしはスルーで、、、

540 名前:nobodyさん mailto:sage [2012/03/06(火) 02:52:11.60 ID:???]
>>538
なぜ?
$^O が検索しにくいのは同じだろう?

541 名前:nobodyさん mailto:sage [2012/03/06(火) 02:56:51.45 ID:???]
perlvarとは何だったのか

542 名前:nobodyさん [2012/03/06(火) 09:53:40.98 ID:zjKZlebn]
質問です、以下の最短マッチが機能しないっぽい? のですが、なぜでしょうか?

コード(抜粋)
$html =~ m!"(.*?)" class="Link88" href="/Models.aspx\?ModelID=$id"!s;
print $1;

実行結果
(〜ごっそり省略) <a title="Loeka Creekside Fern Short Sleeve Jersey 2010

$htmlはLWPで拾ってきたHTMLです。数MBくらいあります。
パターンマッチ内の文字列 class="Link88"〜 というあたりはちゃんとマッチしているようですが、
少なくとも Loeka の左にある " が $1 に含まれちゃうのはおかしい気がします。
また不思議なことに、修飾子 /s を外すとちゃんと最短でマッチしてくれます。

543 名前:nobodyさん mailto:sage [2012/03/06(火) 10:29:35.15 ID:???]
再現可能なコードぐらい貼れ、どーせこうだろうが
$html = q{<a href="b"
id="a" class="Link88"};
$html =~ m!"(.*?)" class="Link88"!s;
$html =~ m!"(.*?)" class="Link88"!;

最短ってのはマッチし始めてからが最短になるんであって、グループ内に"を含まないなんてルールはない
つまり最初の"から class="Link88" ... の手前の"までがマッチするんだよ

544 名前:nobodyさん mailto:sage [2012/03/06(火) 10:46:58.66 ID:???]
なるほど、左に向かって最短マッチはしてくれないんですね。
m!"(.*?)" class="Link88"!

m!"([^"]*?)" class="Link88"!
に変えて解決しました、ありがとうございます。

545 名前:nobodyさん mailto:sage [2012/03/06(火) 12:52:17.96 ID:???]
質問が不親切、再現しようにもコードもない、質問者が何を求めているかを把握するにはこっちが質問を熟読して意図と本当にやりたいことを汲み取らなければならない、などという書き込みに神対応できる >>543 みたいな奴尊敬するわ。

546 名前:nobodyさん mailto:sage [2012/03/07(水) 23:13:16.91 ID:???]
Kent Webさんからダウンロードしたpostmailの設置が上手くいかなくて困っています。

ttp://kueris.pro.tok2.com/postmail.html
↑これなんですが、ご覧の通り送信ボタンを押すとエラーが出てしまいます。
このエラーは、「Minimal.pm」がCGIフォルダ内に見つからない、という意味だと思うのですが、ちゃんとアップロードはできています。

以下、その他の詳細です。
・check.cgiは問題なく機能しました。パーミッションも設定できています。
・postmail.cgiのみを「cgi-bin」というフォルダに移動させました。
・サーバーはTOK2という所をお借りしています。
・エラーメッセージにある13行目辺りの内容はこんな感じです。↓

9 # モジュール実行
10 use strict;
11 use CGI::Carp qw(fatalsToBrowser);
12 use lib './home/kueris/postmail-utf/lib';
13 use CGI::Minimal;
14 use Jcode;

よろしければお力をお貸しください。よろしくお願いします。

547 名前:nobodyさん mailto:sage [2012/03/07(水) 23:45:53.60 ID:???]
use CGI::Minimal;
 ↓
use CGI;

またエラーが出たらお越し下さい。



548 名前:546 mailto:sage [2012/03/08(木) 00:14:54.72 ID:???]
>>547
ありがとうございます。お陰さまで、無事にそのエラーは解消されたです。

しかし、今度は別のエラーが発生しました。
ttp://kueris.pro.tok2.com/postmail.html
↑今はこのようになっています。
パスが違うのかと思い、色々変えてみましたが、効果はありませんでした。
メッセージにある20行辺りの内容は以下の通りです。↓

19 # 設定ファイル認識
20 require './public_html/postmail-utf/init.cgi';
21 my %cf = &init;

度々で申し訳ありません。
ですが、何卒よろしくお願いします。

549 名前:nobodyさん mailto:sage [2012/03/08(木) 09:26:25.31 ID:???]
require "./init.cgi";

で OK

550 名前:546 mailto:sage [2012/03/08(木) 12:15:53.18 ID:???]
>>549
ご回答ありがとうございます。
試してみましたが、相変わらず同様のエラーメッセージが表示されてしまいます。↓
ttp://kueris.pro.tok2.com/postmail.html
init.cgi自体はちゃんとアップロードされているんですが…。

551 名前:nobodyさん mailto:sage [2012/03/08(木) 12:34:33.65 ID:???]
init.cgiが@INCが示すディレクトリの中にあり、読める状態にあるかを確認

552 名前:nobodyさん mailto:sage [2012/03/08(木) 16:18:28.19 ID:??? BE:3622206896-PLT(12000)]
そもそもTOK2でCGIをまともに動かそうなんて無茶なこと考えるなよ

553 名前:nobodyさん mailto:sage [2012/03/08(木) 17:31:49.63 ID:???]
cwd でカレントディレクトリ表示させてみて

CGI で動いてない気がしてきた

554 名前:nobodyさん mailto:sage [2012/03/09(金) 01:25:41.39 ID:???]
初歩すぎる質問で申し訳ありません。
今勉強中なのですが、
postデータ等をこれで変換すると言うのが良くあるのですが、

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

たしかにこれでうまくいきますし、また基本的な挙動も理解しています。
分からないのは、なぜpack("C", hex($1))/egで、問題無く動くのかということです。
具体的には、
@$1で渡されるのは1バイト分なのに、なぜちゃんと2バイト文字として変換されるのか?
A%([a-fA-F0-9][a-fA-F0-9]の書式でなぜ半角文字が受け渡されるのか?
B例えば”テ”はpostからデータを受け取った時には83eなのに、なぜ問題無く変換されるのか?
C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか? "c*"じゃないのに正常に動いてる。 また、$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;で作った変数をそのままpack"c*",$value;としてもうまく動かないのに、なぜちゃんと動くのか?

いろいろ調べたりしたのですが、よくわかりませんでした。

555 名前:nobodyさん mailto:sage [2012/03/09(金) 02:06:50.72 ID:???]
>>554
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; でググれ。

556 名前:546 mailto:sage [2012/03/09(金) 02:23:40.92 ID:???]
皆様、ご回答いただき本当にありがとうございます。

>>551
確認しましたが、問題ありません。
init.cgiは確かに存在しているはずなのですが、認識されていないようです。

試しに、アップロードされたinit.cgiに直接アクセスしてみたところ、404エラーが表示されました。(つづりやパスは間違えておりません)
同じフォルダ内にある別のプログラムにはアクセスできるのですが……。

>>552
プロバイダによってCGIの設置しやすさは違うのてでしょうか?
もしよろしければ、CGIが動きやすい所をご紹介していただけないでしょうか。

>>553
申し訳ありません。プログラミングの経験がない私には、「cwdでカレントディレクトリ表示」の意味がよくわかりません。
調べてみましたところ、これはperlにおけるコマンドのことなのでしょうか。
打ち込んでみましたが、上手く動作しませんでした。

557 名前:nobodyさん mailto:sage [2012/03/09(金) 02:58:21.99 ID:???]
>>555
相当ぐぐったのですけど、「これで動く」「この処理はこう言う処理をしてる」と言う説明はありそれ自体はわかるのですが、
頭でイメージしたものだとどう考えてもエラーが起きるもしくは正しく動作しないはずなのに、「なぜこの書式で正しく動作してるのか?」と言う疑問の解決は見つかりませんでした。



558 名前:nobodyさん mailto:sage [2012/03/09(金) 03:20:04.43 ID:???]
>>554
Perlより文字コードの勉強を先にすべきだな
(1)〜(3)の疑問はそっち寄りだ

559 名前:nobodyさん mailto:sage [2012/03/09(金) 03:37:26.52 ID:???]
>>556
KENT から落としてきて、

13行目:use CGI;
24行目と26行目をコメントアウトでとりあえず動くよ。

何も入力せずに 「送信する」 ボタンを押せば、動作してるのが確認できる。
www11.tok2.com/home/mikisama/postmail-utf/postmail.html


ただし、これは貼らずにいられない。
Q.メールフォームを設置したいのですがsendmailは利用出来ますか?
tok2.com/study/faq/04-07.html

これ以上は スレチ (これ以上もクソも初めからスレチだが・・・) なので、改造スレの方へどうぞ。

560 名前:nobodyさん mailto:sage [2012/03/09(金) 03:45:25.88 ID:???]
文字で考えるな
ただ単なるバイト列として考えればよろし。

今日は SJIS だと 8DA193FA という4バイト。
俺らが見てる 「今」 という文字は、コンピュータからしたら 「8DA1」 という並びのバイト列でしか無い。
そうゆう並びになったから、文字が見えるというだけだ。

561 名前:nobodyさん mailto:sage [2012/03/09(金) 11:31:58.89 ID:???]
てst

562 名前:554 mailto:sage [2012/03/09(金) 13:02:31.68 ID:???]
説明が下手で申し訳ありません。

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;を3つに分解した場合、

例えば、”テストtestだよ”を下の形で出力すると

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/$1/g;

83e83X83gtest82BE82E6となります。これを$hexvalue = hex($value);に
いれようとしたのですが上手くいきません。

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;として出力すると

131e131X131gtest130190130230となり、これをpack("c*",131,e,131,X,131,g,t,e,s,t,130,190,130.230);としても当然上手くいきません。
”test”部分は元々半角小文字なのでs/で式から弾かれてるからとわかったのですが、
カタカナ部分の2バイト目は半角英数混じりなのですがここをちゃんと変換してないようですしそう言うオプションも無いのに、なぜ上手くいくのだろう?とよくわかりません。
カタカナの2バイト目の変換はどこでどのように行っているのでしょうか?

>>554のCは、gで次々代入してるからそう言う事なんだろうか?となんとなくイメージ出来ましたが・・・・・

563 名前:nobodyさん mailto:sage [2012/03/09(金) 13:33:46.30 ID:???]
まず自己矛盾していることに気づいていない糞さ
>@$1で渡されるのは1バイト分なのに
>C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか?
1バイト分のデータ(0x00-0xFF)をpackしてるんだからC*ではなくC

そして文字コードについて全く理解しようとしていない
「テ」の文字コードは「0x83 0x65」で、「e」の文字コードは「0x65」
だから「テ」をパーセントエンコードすると「%83e」であって
「%83」部分さえデコードすれば元の文字に戻るんだよ

ああ壁殴りてぇ

564 名前:nobodyさん mailto:sage [2012/03/09(金) 14:03:28.44 ID:???]
>>562
ポイントは3つ。
一つ目。
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; はURLデコードするための一文であるということ。
”テストtestだよ” をURLエンコードすると
”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”になる。(文字コードはUTF-8)
これをデコードして”テストtestだよ”に戻すのがURLデコード。
つまり$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;という一文の役目。

URLエンコードってのは、例えば「テ」(0xe38386)だったら「%E3%83%86」に変換する。
URLデコートってのは、例えば「%E3%83%86」だったら「テ」(0xe38386)に変換する。

2つ目
正規表現のパターンマッチは一つずつ行われる。
$value="%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88"
に対して
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
をやると、

$1に"E3"が入った状態でpack("C", hex($1))が実行され、文字列"%E3"を0xE3に置換。
$1に"83"が入った状態でpack("C", hex($1))が実行され、文字列"%83"を0x83に置換。
$1に"86"が入った状態でpack("C", hex($1))が実行され、文字列"%86"を0x86に置換。
(以下略)・・・

だからhexやpackにまとめて”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”入れようとするのは間違い。

3つ目
>なぜ上手くいくのだろう?
多くのマルチバイトな文字コードは、「漢字は○○から始まる」とか「ひらがなは××から始まる」っていうルールを持ってる。
だから半角英数とマルチバイト文字が混在しても問題ない。

565 名前:nobodyさん mailto:sage [2012/03/09(金) 14:16:43.38 ID:???]
>>563
@とCはだいたいわかりました。ありがとうございます。

下の方は、pack("c*", 131,101);で”テ”になるのは理解しています。
ただhex($1の段階で131eと出力されてるみたいなので、普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが(当然これだと不具合が出ます)、特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。

566 名前:nobodyさん mailto:sage [2012/03/09(金) 14:22:20.55 ID:???]
>>565
>特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。
「e」な。
そんでもってeの文字コードは10進の101。

>普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが
なりません。
pack("C", 131)、pack("C", 101)が順番に動いている。

567 名前:nobodyさん mailto:sage [2012/03/09(金) 14:26:11.34 ID:???]
>>564
だいぶよくわかりました。本当にありがとうございます。
一文にする事で内部的に自動的にルールで振り分けてるから厳密に考えようとしてもしょうがないと言う事なのでしょうか。
とすると、あの一文を@%を抜くA10進数に変換B文字コードに変換三段階に分けて記述しようとすると逆に自動では行われないのでかなり膨大な記述になるのでしょうか。
わかりやすくしようと同じ挙動をするものをちょっと書いてみようと思ったら配列を使ったりしないとうまくいかない感じでした。



568 名前:nobodyさん mailto:sage [2012/03/09(金) 14:35:01.38 ID:???]
>>566
なるほど。
内部的にはeを101に自動的に変換して文字列を次々に処理してるのですね。
するとそこの部分だけを抜き出して分けて記述しようとすると、やはりeを101に変換させるコードを書かないといけないと言うことですね。

569 名前:nobodyさん mailto:sage [2012/03/09(金) 14:43:54.07 ID:???]
すみません ようやく理解しました。
0x83の次にcが来るので”テ”になる
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;の中ではeは未処理のまま0x83をpackで変換した物の後ろに単純にくっつけて出力したと言うことですね

ようやくわかりました。確かに文字コードの勉強が必要でした
よく調べてみます
大変お騒がせしました

570 名前:546 mailto:sage [2012/03/09(金) 16:47:52.35 ID:???]
>>559
ご回答ありがとうございます。
色々と見落としていた点があったようで、大変失礼致しました。
頂いた助言を元に、サーバーを変えて試してみます。
本当にありがとうございました。

571 名前:nobodyさん mailto:sage [2012/03/09(金) 21:37:28.29 ID:???]
つか use CGI しているのにモジュール使っていないし、
use strict してても全然 strict じゃないw
こんなの怖くて使えないよ('A`)

572 名前:nobodyさん mailto:sage [2012/03/10(土) 01:31:51.91 ID:???]
●やりたいこと:
 jpg画像のサムネイル作成(orファイルサイズ圧縮)がしたい。最悪トリミングでも


レンタルサーバ上でサムネイル画像を作成したいと思っております。
GDやImage Magick、Imager、epeg等々が入っていないのですが、
何かうまい方法がありましたら教えていただきたいと存じます。

配置してパスを通すだけで使えそうなモジュールがありましたら・・

573 名前:nobodyさん mailto:sage [2012/03/10(土) 02:30:16.63 ID:???]
まじめな話、KENT はやめとけ。
あれは20年前のシステムだ。

574 名前:nobodyさん mailto:sage [2012/03/10(土) 03:05:45.88 ID:???]
>>572
width height

575 名前:nobodyさん mailto:sage [2012/03/10(土) 05:37:43.25 ID:???]
>>574
主旨が画像を読み込むスピードを早くしたいので、widthheight指定だけではではちょっと・・

576 名前:nobodyさん mailto:sage [2012/03/10(土) 06:45:54.03 ID:???]
・画像を扱えるツール(プログラム)をレンサバにインストールする
 画像を扱うPerlモジュールは大抵別途本体(バイナリ)かライブラリも同時にインストールされてる必要があるからね
・画像加工できる別サーバを用意し、画像ファイルをそちらのサーバに投げてサムネイルを作ってもらい、それをダウンロードする

Image Magick じゃなくてImageMagick
でもImageMagickも入ってないレンサバって今時あるの? 画像ファイルを(たぶん大量に)アップロードできるくらいだから最安でカスカスのレンサバってことでもないと思うんだが

577 名前:nobodyさん mailto:sage [2012/03/10(土) 08:45:04.67 ID:???]
>>576
ありがとう。それらは考えたんだけど鯖分けるなら自分でサムネつくるのと
手間がかわらないのでなやんでる。

うん。ImageMagickはいってない。



578 名前:nobodyさん mailto:sage [2012/03/10(土) 10:20:44.99 ID:???]
ほかのレンタルサーバーに移動すればよい。

579 名前:nobodyさん mailto:sage [2012/03/10(土) 12:27:16.79 ID:???]
フリーなサーバならまだしも、金を払ってるレンタルサーバなら GD ぐらい入ってないの?
perl が駄目でも、PHP で GD が動いてる可能性とかは?

580 名前:nobodyさん mailto:sage [2012/03/10(土) 18:41:09.72 ID:???]
>>579
PHPでも組んでみたけどだめでした。

素直にさくらとかWebArenaSuiteX使うべきなんですが、
アプロダなのでちょっとアダルト要素入る可能性があり
ピンク系も許可のレンタル鯖でないとだめかなというのもネックになってます。

581 名前:nobodyさん mailto:sage [2012/03/11(日) 00:39:52.43 ID:???]
HTML解析で質問です。
HTML::TreeBuilderを使って解析をしているのですが、
どうしても

<span class="hogehoge">fuga</span>

の、fugaが取り出せません。

($tree->look_down('class', 'hogehoge')

ではダメなのでしょうか・・・?ご教授お願いしますm(_ _)m

582 名前:nobodyさん mailto:sage [2012/03/11(日) 09:53:46.90 ID:???]
>>581
同じクラスのエレメントが複数あるとか?

583 名前:nobodyさん mailto:sage [2012/03/23(金) 00:48:00.36 ID:???]
なかなか短いコードで再現できなくて申し訳ないのですが、

print "DEBUG1\n";
$html =~ m!<a title="([^"]*?)" class="Link88" href="/Models.aspx\?ModelID=$id" id="ModelLink\d+">.*?<td class="Label11">(.*?)</td>.*?<td class="Label14">(.*?)</td><td class="Label13".*? (\d+)%</td>!s;
print "DEBUG2\n";

このm//の1行だけの処理に、20秒ほどかかることがまれに起きます。
その間 top(1)で見てるとCPU負荷が異常に跳ね上がります。
この行はループ中、LWPで取得するたび$htmlが変わりながら数百回実行されるのですが、
異常に時間がかかる時以外は瞬時に通り過ぎます。

時間がかかる時の $htmlを試しにファイルに吐かせてみましたが、
サイズはせいぜい500KBほどで、
このときのファイルを上記の行だけのテストスクリプトに食わせても
瞬時に終了し異常が再現できません。

原因と対策に何か考えられることはあるでしょうか?

584 名前:nobodyさん mailto:sage [2012/03/23(金) 01:14:12.71 ID:???]
>>583
メモリスワップが発生してるとか。

585 名前:nobodyさん [2012/03/23(金) 04:21:38.62 ID:SsskDSLS]
質問です。
Perl/CGI側でHTTPのエラーコードを返そうと思います。

  #!/usr/bin/perl
  print "Status: 404 Not Found\n";

  exit;

というコードを書いたとき、ブラウザ上では想定通りに404エラーとして表示されるのですが
Apacheのエラーログを見てみると

  Premature end of script headers: /home/foo/htdocs/bar.cgi

とだけ表示されます。この時、他のエラーメッセージは見当たりません。
きちんと動いてはいるので問題ないと言えば問題ないのですが、これを出さないようにするにはどうしたら良いでしょうか。

・404エラーではなく、普通にウェブページを出力した場合には問題ありません。
・同じディレクトリでは別のCGIも問題なく動いており、パーミッションはそれらと同値に設定してあります。
・確認してみたところバージョンはApacheが1.3、Perlが5.8です。古い(´・ω・`)


586 名前:nobodyさん mailto:sage [2012/03/23(金) 04:35:43.93 ID:???]
たぶんcontent-typeを書くと消えるというかググれ

587 名前:nobodyさん [2012/03/23(金) 04:46:19.26 ID:SsskDSLS]
>>586
ありがとう。でもtext/htmlにしろtext/plainにしろ状況は変わらないんだ



588 名前:nobodyさん mailto:sage [2012/03/23(金) 04:58:11.94 ID:???]
>>585
exitって必要なの

589 名前:nobodyさん mailto:sage [2012/03/23(金) 05:11:05.01 ID:???]
\n\n

590 名前:nobodyさん mailto:sage [2012/03/23(金) 05:15:18.99 ID:???]
Header1: foo
Header2: bar
(空行)
body

仮にボディを空にするとしても、ヘッダとボディを隔てるものは必要ですよね

591 名前:nobodyさん [2012/03/23(金) 05:46:15.14 ID:SsskDSLS]
>>588
確かに585のような最小コードでは、exitは有っても無くても変わらないかも。

>>589-590
ステータスコードの末尾を\n\nにすると、
実際にページが送信されている(といっても改行1つだけだが)という扱いになるのか、
デフォルトの404ページが表示されずに、真っ白のページが表示されるようだ。

ちょっと面倒だけど、ブラウザ表示用にエラーページを用意して、
それを出力するようにすれば、とりあえず問題は無さそう。


.htaccessでErrorDocument指定されてるページに飛ばすには、自前でリダイレクトするしか無いのかなー?


592 名前:nobodyさん mailto:sage [2012/03/24(土) 01:12:43.26 ID:???]
>>591
普通exitなんて書かないよ?トホホにでも書いてあったのかな。


593 名前:nobodyさん mailto:sage [2012/03/24(土) 03:29:50.29 ID:???]
>>592
トホホは見てないけど、そうなんだ。
正常終了のときは使わない方がいいのかな。まあ、異常終了ならdie使うけど。

594 名前:nobodyさん mailto:sage [2012/03/24(土) 06:48:02.45 ID:???]
コードが最小だろうが最大だろうがそんなものは必要ない

595 名前:nobodyさん mailto:sage [2012/03/24(土) 08:52:21.86 ID:???]
何故exitが不要なのか、
いわゆる「省略の美学」以外に積極的な理由があったら、誰か教えて欲しい。

何らかの弊害(速度や安全性の問題など)があるとか、
別の関数等で置き換えるのが普通だとか、
構造化プログラミングにおけるgoto不要論と同じような理由だとか、ヒントでも構わないので。

596 名前:nobodyさん mailto:sage [2012/03/24(土) 09:25:36.37 ID:???]
そりゃなくても最後まで行けば仕舞いだけどexitは必ず書いてるな。

597 名前:nobodyさん mailto:sage [2012/03/24(土) 09:51:51.12 ID:???]
>>595
コンパイル済みのスクリプトをキャッシュして使い回すような環境で
無闇に exit すると良くないケースがある。
cast-a-spell.at.webry.info/200801/article_9.html
harapeko.asablo.jp/blog/2006/06/29/425898

反対に、書かなくていい場面で書いておくのが「冗長の美学」でしかないのなら、
__END__ なり #exit なりとしておいた方が無害でいい。



598 名前:nobodyさん mailto:sage [2012/03/24(土) 10:10:34.01 ID:???]
mod_perlとかplackみたいな永続化環境だとアクセスごとに走る部分でexitしたらだめじゃね
なんにせよこれ「いわゆる省略の美学」とは全く別問題

599 名前:nobodyさん mailto:sage [2012/03/24(土) 10:43:09.74 ID:???]
>>597-598
ありがとう。
mod_perlへの移植(と言ってもかなり書き換えることになりそうだ)を考えるなら、
最初からexitを使わないコーディングが重要ってことか。

mod_perlだと通常のexitは使わないほうがいいってのは聞いたことがあったんだけど、
実際にmod_perlは弄ったことがなくて、その感覚が掴めてなかった。


>>596-597
プログラムを1ファイルで済ませたい場合、
自分はメインルーチンソースファイルの先頭に、サブルーチンを最後にまとめて書くことが多いんだけど、
メインルーチンの最後に、以下はメインルーチンとしては実行されませんよと明言するためにexitを入れたりしてた。

600 名前:nobodyさん mailto:sage [2012/03/24(土) 11:58:06.99 ID:???]
俺も同じでソースの最初に main() なんだけど、その直前に exit() 書いてる。


use なんちゃら〜

our なんちゃら〜

main();

exit(0);

sub main{
}

sub func{
}


っていう感じ。

601 名前:nobodyさん mailto:sage [2012/03/24(土) 17:23:47.75 ID:???]
Cから入った人に多そう、とか思った

602 名前:nobodyさん mailto:sage [2012/03/25(日) 01:57:35.52 ID:???]
基本的に.pmにロジック書いて、.plはそれを呼ぶだけだからexitは滅多に使わないなあ。

603 名前:nobodyさん mailto:sage [2012/03/25(日) 15:34:18.54 ID:???]
1枚スクリプトで、&main; exit; は有りだと思う。
ただ基本は >>602 のようにするから滅多に使わない。


冗長の美学を語る人が、1枚に長いスクリプト書いてるのは矛盾を感じる。


604 名前:nobodyさん mailto:sage [2012/03/25(日) 18:03:11.28 ID:???]
>>603
そこはスクリプトの規模によるんじゃね?
短めの、他と共通化出来ないサブルーチンが2〜3個あるくらいなら、分けるまでも無いだろう。

605 名前:nobodyさん mailto:sage [2012/03/25(日) 19:02:45.23 ID:???]
それはそんなソースになってる時点で論外だな。

606 名前:nobodyさん mailto:sage [2012/03/25(日) 19:14:00.38 ID:???]
別に嫌みとかでは無いんだけど、>>605 の数百行ぐらいの小さいソースと、
2〜3000行ぐらいの中規模のソースを見てみたい。

ってのも、俺の殆どのソースは1枚で済ましてるから、他人ので学習というか知識を深めてみたいから。


607 名前:nobodyさん mailto:sage [2012/03/25(日) 20:04:16.17 ID:???]
605は安価がないからなー、自分が思ってるのと全く違う主張の可能性もあるw



608 名前:603 mailto:sage [2012/03/26(月) 02:46:50.44 ID:???]
>>606
>>605 とは別人なんだが、数百行の小さいソースって、1プロジェクトで数百行ってことかな。
1ファイルで4,5百行くらいって話だとちょっと長いかな。
スクリプトファイルを書くにしても、大体いろいろな機能をクラス(pmファイル)に分けてそいつらの責任に任せたほうがメンテが楽。








609 名前:nobodyさん mailto:sage [2012/03/26(月) 14:06:22.42 ID:???]
>>608
それはモダンなやり方ですか?

610 名前:nobodyさん mailto:sage [2012/03/27(火) 01:13:45.03 ID:???]
え、モダンかぁ、、、、悪い書き方はしちゃダメだけど、モダンとかは気にしないほうがいいと思うよ、、、
流行り廃りだし、自分で判断したほうがいいよ


611 名前:nobody mailto:sage [2012/03/30(金) 00:02:30.52 ID:???]
そうだね。モダンは足が速いから。スレッドももうなくなったしね。

612 名前:nobodyさん mailto:sage [2012/03/30(金) 00:16:05.99 ID:???]
【モダン推奨】Perlについての質問箱 50箱目
toro.2ch.net/test/read.cgi/tech/1327110999/

613 名前:nobody mailto:sage [2012/03/30(金) 00:29:41.87 ID:???]
初心者には敷居が高いから万人向けってわけじゃない

614 名前:nobodyさん mailto:sage [2012/04/03(火) 10:03:29.27 ID:???]
こちらはcatalystについての質問でもよろしいでしょうか?
catalystのスレはあるものの、人が居なさそうなので。。

catalystとApacheをつなぐために、
perl-Catalyst-Engine-Apache-1.12-1.el5.rf.noarch.rpm
を入れようとしているのですが、依存関係で以下の物が足りないと落ちます。
---> Package perl-Catalyst-Engine-Apache.noarch 0:1.12-1.el5.rf set to be updated
--> Processing Dependency: perl(Apache::RequestRec) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Response) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Const) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache2) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::RequestIO) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::URI) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Connection) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::RequestUtil) for package: perl-Catalyst-Engine-Apache

いろいろ探すと、mod_perlの旧バージョン(1.9.9)には含まれていたものの最新バージョン(2.0.5)には含まれて居ないモジュールのようです。

対応方法が分かる方、ご教授いただけますでしょうか。
宜しくお願いいたします。


615 名前:nobodyさん mailto:sage [2012/04/03(火) 11:11:13.68 ID:???]
>>614
人がいなくてもそれがそのスレなんだからそこに書くしかないんじゃ?
人が少ないからで別スレきたら何でもアリになるだろ

616 名前:613 mailto:sage [2012/04/03(火) 16:39:22.06 ID:???]
自己解決しました
Catalyst::Engine::Apache2
なるものがcpanから出てました
ちょうど過渡期のようですね


617 名前:nobodyさん mailto:sage [2012/04/04(水) 00:34:44.70 ID:???]
過渡ちゃんペッ



618 名前:nobodyさん mailto:sage [2012/04/04(水) 18:53:47.59 ID:???]
CGIゲーム改造してるんだけど

ID<>名前<>パスワード<>データ各種・・・

みたいに記録してあって下のように処理しててこれが何か所も出てくる
扱うデータ増やすたびに全て修正しなくちゃいけなくてやたら面倒くさい
配列だと見た目で何の変数かわかりにくいし連想配列はつなぐときの順番がばらばらだし
どちらも読み取りだけの時使わない変数まで格納するの無駄かなあと考えてたら先に進まなくなってしまった
変数の追加とか挿入とかするとき一か所くらいの修正でいい無駄の少ない方法ない?

for($i=0;$i<$num;$i++){
   ($id[$i],$name[$i],$pass[$i],...) = split (/<>/, $data[$i]);
   ↓
   処理
   ↓
   $newdata[$i] = "$id[$i]<>$name[$i]<>$pass[$i]<>...";
}


619 名前:nobodyさん mailto:sage [2012/04/04(水) 20:03:38.87 ID:???]
>何か所も出てくる
subにぶち込んどきゃいいだろ

620 名前:nobodyさん mailto:sage [2012/04/04(水) 21:27:07.37 ID:???]
そんなあなたにはスライス

621 名前:nobodyさん mailto:sage [2012/04/04(水) 22:59:22.68 ID:???]
スライスって数字のやつ?何か挿入して増やそうとするとずれるよね
単純に後ろに追加すると位置的にわかりにくいから挿入したいんだが、数字のチェックもしなくていい方法ない?
元のデータの書き換えは再生成するから考えないとして


データ0<>データ1<>データ2<>・・・

データ0<>データ1<>データx<>データ2<>・・・

それとサブルーチンだとどうやって引き渡そうか悩んでる
配列だと結局受け取るときに順番が大事だし連想配列だと上書きする時また<>で連結しにくいと思ったんだが

622 名前:nobodyさん mailto:sage [2012/04/04(水) 23:25:45.28 ID:???]
順番付き連想配列使えば良いじゃんw

623 名前:nobodyさん mailto:sage [2012/04/05(木) 00:00:05.98 ID:???]
データファイルにはヘッダを必ず含めれば幸せになれるかも。

スライスは苦手なのでサンプルは今書けないけど、ファイルを全て読み込んだ時のイメージはこんな感じ。

my $data = {};
$data->{'headers'} = [〜];
$data->{'data'} = [
 {○=>△,◇=>□},
 {○=>△,◇=>□},
  〜以下略〜
];

読み書きは @{$data->{'headers'}} の順番で行えば良い

で、読み書きを行うサブルーチンを作れば良い。


CSV 的なデータを連想配列で読み込むモジュールがあった気がする。


624 名前:nobodyさん mailto:sage [2012/04/05(木) 00:25:31.57 ID:???]
だから順番付き連想配列使えって。
なんで無理して難しい方法で実現しようとするの?

625 名前:nobodyさん mailto:sage [2012/04/05(木) 06:21:58.63 ID:???]
>>624
例えばこうやるんだよ、って簡単なサンプルコードを書いてやるといいよ。

626 名前:nobodyさん mailto:sage [2012/04/05(木) 09:51:23.36 ID:???]
>>618
ちょっと書いてみた。
www5.puny.jp/uploader/download/1333586646.zip
pass: perl

順番付き連想配列ってこうでいいのかな?
添削歓迎。


627 名前:626 mailto:sage [2012/04/05(木) 10:42:38.78 ID:???]
id とかって配列なのか。
ぱっと見 $i いらなそうなので無視してましたよ。
要件満たしてないっぽいので忘れてください。



628 名前:nobodyさん mailto:sage [2012/04/05(木) 13:04:38.74 ID:???]
www5.puny.jp/uploader/download/1333598575.pl
pass:perl
自分はこう書いた

629 名前:nobodyさん mailto:sage [2012/04/05(木) 15:56:41.39 ID:???]
>>628 それだったら $data = [array_ref, hash_ref, ...] の方が良くないですか?

my $data = readdata_mod();
my $headers = shift @$data;

for my $hash (@$data){
 $hash->{NAME} .= '【逮捕】';
 print "$hash->{$_}\n" for @$headers;
}

sub readdata_mod{
 my $headers = <DATA>;
 chomp $headers;
 $headers = [split(/<>/, $headers)];

 my $data = [$headers];

 while(my $line = <DATA>){
  chomp $line;
  my %tempdata = ();
  @tempdata{@$headers} = split(/<>/, $line);
  push @{$data}, \%tempdata;
 }
 return $data;
}

それより気になるのは >>618 のソースだと
@id,@name,@pass... と配列があるんですよね。
これをどう処理してるか謎なんで
レコードをなめるだけでいいのか悩むところ。

630 名前:nobodyさん mailto:sage [2012/04/05(木) 16:34:07.79 ID:???]
そこは好みかな
自分はデータとヘッダは分離させたいので、ああやって書きました。


631 名前:nobodyさん [2012/04/06(金) 11:04:06.62 ID:AWfq6sbZ]
すいません。perlをコマンドラインで使うやり方について質問させて下さい。
例えば数字の入ったファイル名だけ全部lsしたい時って
どのように書けばいいのでしょうか。
こんな風に書いてみたんですが何も出力されません…
ls | perl -e "print /[0-9]/ "


632 名前:nobodyさん [2012/04/06(金) 11:29:12.54 ID:AWfq6sbZ]

find . -maxdepth 1 -name '*.gif' | perl -ne 'print if /\/*[0-9]{2}\.gif$/;'
こんな感じで出来ました

633 名前:nobodyさん mailto:sage [2012/04/07(土) 02:00:48.78 ID:???]
>>632
find . -maxdepth 1 -name "*[0-9][0-9].gif"

634 名前:nobodyさん mailto:sage [2012/04/07(土) 02:02:53.93 ID:???]
>>632
> if /\/*[0-9]{2}\.gif$/;
これはワイルドカードと正規表現をごっちゃにしているな。別物だからちゃんと区別するように。

635 名前:nobodyさん mailto:sage [2012/04/07(土) 04:29:33.70 ID:???]
それって
find . -maxdepth 1 -name "[0-9][0-9].gif"
と等価なだけなんじゃないのか

636 名前:nobodyさん mailto:sage [2012/04/07(土) 09:58:11.44 ID:???]
以下のコードで,https://member.livedoor.com/login/ が
取得できません.

use WWW::Mechanize;
my $mech = new WWW::Mechanize( autocheck => 1 );
my $url="https://member.livedoor.com/login/";
#my $url="https://www.nodeworks.com";
$mech->get($url);
print $mech->content;


$url を https://www.nodeworks.com とした場合は,取得できます.
https://member.livedoor.com/login/ が取得できない原因として,
何を疑ったらいいでしょうか??

637 名前:nobodyさん mailto:sage [2012/04/07(土) 11:49:34.04 ID:???]
USER AGENT がちゃんと設定されてないだけでしょ



638 名前:nobodyさん mailto:sage [2012/04/07(土) 12:32:23.46 ID:???]
HTTP::Cookies

639 名前:nobodyさん mailto:sage [2012/04/07(土) 19:43:25.79 ID:???]
マジレスするとSSLを使用しているページにはCrypt-SSLeayを入れないと繋げない事もある

640 名前:nobodyさん mailto:sage [2012/04/07(土) 21:04:03.67 ID:???]
あくてぃぶ とか すとろべりー ならインストール後には可能やよ
Linux 標準の ぱーる は おーぷんえすえすえる 入れないとだめですわ シャキーン

641 名前:nobodyさん mailto:sage [2012/04/08(日) 11:30:20.98 ID:???]
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
を追加すると繋げることもある

642 名前:636 mailto:sage [2012/04/08(日) 21:41:15.55 ID:???]
>>641

https:://gitub.com は,
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
でいけた.

しかし,https://member.livedoor.com/login/ は,それでもいけない.
https://member.livedoor.com/login/ は,特殊なんかな.

643 名前:nobodyさん mailto:sage [2012/04/14(土) 20:30:27.28 ID:???]
「かんたんプログラミングCGI/Perl」ってこのスレ的にはどうでしょう?
ttp://d.hatena.ne.jp/perlcodesample/20120414/1334359182

この人のブログ、>>2のテンプレに載ってないから心配になって聞いてみました。

644 名前:nobodyさん mailto:sage [2012/04/14(土) 20:38:40.49 ID:???]
ソースコードに誤字山積ってだけで論外だろ。

そのブログ自体は数年前から、2ch に宣伝気味に貼られるけど
あんま相手にされてない



645 名前:nobodyさん mailto:sage [2012/04/14(土) 20:45:44.78 ID:???]
>>644の言う通り。その本もブログも絶対に参考にしちゃだめ。
現代的()なPerlなんて覚えてもろくなことにならないから
5.6でも動くようなコーディングを心がけるべし。
あとこいつがプッシュしてるMojoliciousも、ちょっと有名なCatalystとかも
やめといた方がいい。
フレームワークなんてすぐ腐る。
CGIが一番。

646 名前:nobodyさん mailto:sage [2012/04/14(土) 21:04:47.55 ID:???]
フレームワークは小さなやりたいことに対して規模がデカすぎ

647 名前:nobodyさん mailto:sage [2012/04/14(土) 21:09:27.25 ID:???]
10年以内に発売されたような高性能PCとかじゃないとすぐメモリを食いつぶされるからな>フレームワーク。
フレームワークは金持ちのお坊ちゃまの娯楽、甘えでしかない。
技術を自分のモノにしたければCGIで泥臭く書け。



648 名前:nobodyさん mailto:sage [2012/04/14(土) 21:45:18.04 ID:???]
フレームワークごときでメモリが食いつぶされるような
貧弱なマシンで使ってるの?

それ選択が間違いなだけだよ。

ユーザー数、数万、数十万のウェブサービスを作っていれば、
必然と複数台構成のマシンになる。
メモリの話だと1台10GBオーバーとか当たり前。

そういう世界の人に対して高性能PCとか、メモリ容量とか
釈迦に説法ってやつだと思わないか?

649 名前:nobodyさん mailto:sage [2012/04/15(日) 11:24:37.83 ID:???]
はいはい、Mojoと喪男でがんばってね!

650 名前:nobodyさん mailto:sage [2012/04/15(日) 11:27:08.04 ID:???]
とにかくCGIで書くことを心がければ小規模から大規模までどんなアプリだって書けるようになる。
フレームワークは覚せい剤。手を出したら終わり。

651 名前:nobodyさん mailto:sage [2012/04/15(日) 11:52:49.40 ID:???]
まあおれの場合、CGI.pmすら嫌なんでHTML直に書いてるけどね
その方が書きやすいしメンテもしやすいと思ってる
初期の頃からそうしてるけどぶれていないね

652 名前:nobodyさん mailto:sage [2012/04/15(日) 11:58:08.00 ID:???]
いいねぇ。素晴らしい。
楽はしちゃだめだよね。

653 名前:nobodyさん mailto:sage [2012/04/15(日) 13:46:50.99 ID:???]
モジュール作成者の世界観とおれが直面している問題とは無関係だから。
モジュールのメソッドの整理具合が、個別の問題にマッチしていないのは
当然あり得ること。
個別の問題を解決するのを車輪の再発明だとは思わない(キリッ

654 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:09.38 ID:???]
>>653
そういう場合はラッパーを作ればいい。


655 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:40.71 ID:???]
プロとアマチュアの違いを見た

656 名前:nobodyさん mailto:sage [2012/04/15(日) 15:17:25.01 ID:???]
なんだかんだで、ちょっと機能を足しただけのラップモジュールを作る機会って少なくないね。

自分が今のやってるロジェクトだとHTML::Template系使ってるけど、
共通パラメータやらフィルタやら、細かい部分が多くてなあ。

657 名前:nobodyさん mailto:sage [2012/04/16(月) 00:50:12.93 ID:???]
ラッパーを作るってことは元のものより粗いものしか作れないでしょ



658 名前:nobodyさん mailto:sage [2012/04/16(月) 02:30:46.51 ID:???]
>>643
ブログの中で自分の名前間違えてたりするレベルなので、本のほうも
推して知るべし、です。

659 名前:nobodyさん mailto:sage [2012/04/16(月) 09:27:44.08 ID:???]
もちろん、こいつの雑誌連載も糞。
上手になりたかったらもっと2chを活用しろ。
オライリーと2chだけで十分。

660 名前:nobodyさん mailto:sage [2012/04/17(火) 05:05:18.23 ID:???]
ある入門書にこう書いてありました
「関数とは、特定のまとまった処理を実行する機能のことです。
・・・一般的に、プログラムの中で呼び出される際にデータを受け取って
特定の処理を行い、結果を返す働きをします」

演算子もこの説明における関数と働きは似ているように見えます
例えば加算演算子が 2 つの数を受け取って和の値を返すというように

関数と演算子に大きな違いがあるのでしょうか?
なんで「関数」と「演算子」とわざわざ呼び分けているわけですか?

661 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:41.99 ID:???]
その入門書の信頼性を疑ってみる。

662 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:59.01 ID:???]
>>660
違いは無い。引数の取り方が違うだけ。

663 名前:nobodyさん mailto:sage [2012/04/17(火) 12:35:26.61 ID:???]
入門書なんか捨てろ
Googleも使うな
2chで全て解決






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef