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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/09/09(金) 18:11:49.71ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

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

前スレ http://hibari.2ch.net/test/read.cgi/php/1295170172/
0305nobodyさん2011/11/16(水) 00:15:29.63ID:???
>>304
ありがとう。
最初の「>」で拾ってしまうんですね。

高速性の必要なものではなく、いくつかの商品の価格変化をログ取ってるだけなので、
API利用するところまでは考えてません。手続きめんどいので。
0306nobodyさん2011/11/16(水) 06:46:36.29ID:???
>>305
拾いたい箇所が1ファイルに1箇所くらいで構造も単純ならパターンマッチングの方が
手っ取り早いよね。
でも構造が繰り返しだったりややこしかったりする時はWeb::Scraperとか便利よ。

>>304
パーズ? パース? ← parse
0307nobodyさん2011/11/16(水) 07:50:11.05ID:???
考えるの面倒だからという理由で、モジュールに丸投げする底辺でゴメンナサイ
0308nobodyさん2011/11/16(水) 09:59:12.27ID:???
そのためのモジュールでしょ 無問題
03093042011/11/16(水) 10:04:04.24ID:???
ありゃ。smooth(ズ)→スムース みたいなもんで英語では parz って発音するものだと思い込んでたからそれに合わせてたわ。
調べてみたらイギリス英語系の辞書だとパーズだけど、アメリカ英語でパースが一般的みたいだからそっちのほうがいいや。サンクス
0310nobodyさん2011/11/16(水) 16:16:46.49ID:???
>>309
>イギリス英語

へー。良いことを知った。
0311nobodyさん2011/11/16(水) 16:34:39.13ID:???
本当だ。
2つ発音されるね。

parseの意味 - 英和辞書 - goo辞書
http://dictionary.goo.ne.jp/leaf/ej3/61513/m0u/parse/
0312nobodyさん2011/11/16(水) 16:52:26.25ID:???
そうか。どっちもありなんだ。
勉強になったぜ。
0313nobodyさん2011/11/16(水) 23:26:19.41ID:???
テキストファイルから3行だけほしいときって、1行で記述することってできますか?

今は for で回して push してるんだけど、
@lines = <$fh> x 3;
みたいな感じで書けたら落ですよね。。。
0314nobodyさん2011/11/17(木) 00:05:31.82ID:???
>>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
0315nobodyさん2011/11/17(木) 00:27:12.12ID:???
やっぱ、なんかしらで回すしか無いですよね。
ありがとうございました。
0316nobodyさん2011/11/17(木) 00:48:38.68ID:???
>>315
ループを避ける事自体が至上命令ならば >>314 の1番目か
$/ = \64; # 充分なサイズのバッファ
my @line = <DATA> =~ /^(.*\n)(.*\n)(.*(?:\n|\z))/;
0317nobodyさん2011/11/17(木) 00:53:27.15ID:???
@line = (<DATA>)[0..2];
0318nobodyさん2011/11/17(木) 09:42:10.49ID:???
至上主義ってわけじゃないんだけど、ループの中で特に処理をするわけじゃないから
1行で簡潔にできたら嬉しいよね〜

っていう程度です。
0319nobodyさん2011/11/18(金) 00:09:48.76ID:???
ループを決して書こうとしない部下を思い出した。
そいつは自分自身がループして同じ内容を必要な行数分タイプしてたっけ。
0320nobodyさん2011/11/18(金) 09:22:43.24ID:???
8bit機の時代はループの条件判定のタイムロスを惜しんで
ループ展開とかやったっけな。アセンブラで。
0321nobodyさん2011/11/18(金) 10:21:10.82ID:???
ループではないけど、100程度のif文を自動生成するプログラムなら見たことがある…
0322nobodyさん2011/11/18(金) 21:40:15.63ID:1hunDax1
入門書を読んでて気になったのですが
ダブルクォート文字列で使われるエスケープシーケンスと
マッチ演算子の中の正規表現で使われるエスケープシーケンスは
よく使われる改行文字(\n)やタブ(\t)などが両方にあるので
厳密に言えば違うけれども、大体同じものと理解していいのでしょうか?

それとも全く違う、あるいは全く同じものなのでしょうか?
0323nobodyさん2011/11/18(金) 21:56:27.18ID:???
覚えることが少なくなるように同じ記法を採用しているだけで、
それを解釈するコードは文字列と正規表現では別物だと考えて
ください。
0324デフォルトの名無しさん2011/11/19(土) 13:39:08.87ID:???
全く同じであれば、本の記述は1回のはず。
別物だから区別して書いてあって、本に2回出てくる。

でも覚えやすいように同じ記法にしている。
0325nobodyさん2011/11/23(水) 23:35:55.57ID:???
やっと規制がとけました

>>323-324
ありがとうございます
0326nobodyさん2011/11/26(土) 22:25:41.09ID:???
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を使用しています。
0327nobodyさん2011/11/26(土) 22:49:02.08ID:???
>>326
http://txqz.net/blog/2007/06/16/1641
0328nobodyさん2011/11/26(土) 23:38:20.62ID:zFlJhwY9
system()で外部コマンドを呼び出すと呼び出しは行われるのですが、そのあとの処理に進まずに
Internal errorになってしまいます。なにか呼び出し方があるのでしょうか

system '/bin/ls', "-la";
print "Location: index.html\n\n";
0329nobodyさん2011/11/26(土) 23:51:55.90ID:???
そのスクリプトを手元で実行したことはあるかい?
0330nobodyさん2011/11/27(日) 00:07:55.85ID:???
CGIで動かしてるんだったらHTTPサーバのログにエラー内容が記録されてるんじゃないか?
0331nobodyさん2011/11/27(日) 00:56:06.95ID:E4v1+esL
malformed header from script. Bad header=total 68: test.cgi, referer: http://redhat6/test.html
とか出てます。Systemを実行しなければこのメッセージは出ないです。
0332nobodyさん2011/11/27(日) 01:07:18.85ID:???
>malformed header
だからヘッダがどうなってるか見ろ
0333nobodyさん2011/11/27(日) 01:44:44.18ID:E4v1+esL
ls -la とか バイナリの実行ファイルとかですが、、、
0334nobodyさん2011/11/27(日) 02:47:47.23ID:???
うーん…
真っ先に HTTP ヘッダがなければCGIとして機能しないでしょ。
エラーになるのは当たり前。
でもって Location: で飛ばしてるんだから system '/bin/ls', '-la'; は全く意味がない。
仮に print "Location: index.html\n\n"; の次に置いても無視されるだけ。
そのCGIの目的(用途)は何なの?
0335nobodyさん2011/11/27(日) 03:52:11.45ID:???
ん? 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 試す環境ないんで推測だけど。
0336nobodyさん2011/11/27(日) 04:36:05.90ID:???
>>335
だからそう書いてるだろ。
0337nobodyさん2011/11/27(日) 23:08:22.74ID:???
>>332
「ヘッダ」が分からないので見ろといわれてる対象が分かっていない
に一票。

つまり
print "Location: index.html\n\n";
は、理解して書いているのではなく、他のプログラムのコピペ。
0338nobodyさん2011/11/27(日) 23:27:05.03ID:???
print "Location: index.html\n\n"; の前に system を置いちゃうくらいだからそうなんだろうな。
0339nobodyさん2011/11/28(月) 01:55:16.13ID:???
ここまで答えのようなヒントが出てれば、あとは大丈夫でしょう。きっと・・・
03403262011/11/28(月) 15:55:21.96ID:???
>>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/"取得したい
03413262011/11/28(月) 16:21:49.46ID:???
>>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について同様な処理を繰り返します。


つづく
03423262011/11/28(月) 16:23:22.87ID:???
つづき

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

@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を探しに行くのではないかと思うのですが
何か間違えているのでしょうか?
どこをどうすればできるようになるのか教えてください。
0343nobodyさん2011/11/28(月) 16:28:04.90ID:???
>>340-342
>>1
Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/
【Apache】mod_rewriteについて語るスレ
http://hibari.2ch.net/test/read.cgi/php/1023791370/
03443422011/11/28(月) 23:12:53.78ID:???
>>343
ここまでいくとCGIとは関係なくなってきますね。
誘導ありがとうございます。

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

また、以前ダウンロードした時はは内容が英語でした
出来れば日本語版があればそちらをダウンロードしたいのですが、どこか内でしょうか?
0346nobodyさん2011/11/30(水) 10:51:48.72ID:???
perldoc.jp
0347nobodyさん2011/11/30(水) 21:09:58.63ID:???
Markdown.plの出力結果にhtml, head, bodyなどの要素を加えたいんですが
そういうオプションとかってデフォルトの機能にはないですよね?

出力されたhtmlファイルを開く→先頭に書き足す→末尾に書き足す→上書き保存
という処理をするスクリプトを書くということ以上の解決策ってないですよね?
0348nobodyさん2011/11/30(水) 23:31:46.18ID:???
中間ファイル作らなくっても
先頭を書き出す→markdown.plを呼び出して結果を書き出す→末尾を書き出す→保存
でいいんじゃね?
0349nobodyさん2011/12/03(土) 17:25:31.47ID:???
>>347
>上書き保存という処理をするスクリプトを書くということ以上の解決策

何をもって上/下と言っているのか分からんが、Markdown.pl に書き足す
方法はなぜ思い浮かばないのか。
0350nobodyさん2011/12/03(土) 19:26:36.05ID:???
>>349
まあMarkdown.plはいじらないでそのまま使う方が自然だろう。
やるとしたら別名にリネーム(コピー)してから自分専用にカスタマイズ、かな。

ついでに350ゲト
0351nobodyさん2011/12/04(日) 11:44:58.71ID:???
>>347
作者に要望を出す。これ最強。たぶんやってくれる。
0352nobodyさん2011/12/05(月) 11:39:58.61ID:???
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;
}
0353nobodyさん2011/12/05(月) 13:46:44.74ID:???
しっかりと書くなら
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;
}
03543522011/12/05(月) 15:34:16.27ID:???
>>353

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

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

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

nobodyさんが即答するスレでしたか、暗号のようなQAで驚きました。
おみそれしました。
0358nobodyさん2011/12/08(木) 23:09:44.53ID:???
>>355
355のレベルでこれから頑張るよりも専門の会社に発注して、
自分は本業に専念したほうがよい
0359 ◆gHpPvpjxUOSB 2011/12/09(金) 00:04:54.14ID:???
格安で俺が引き受けちゃるけんね
0360nobodyさん2011/12/09(金) 10:54:15.39ID:???
>>355
そりゃコーディング違いだ。
私もコーディングは外注した方が幸せになれると思う。そんな付け焼き刃じゃどうにもならんでしょ。
0361Web初級2011/12/10(土) 08:46:00.83ID:Suxg5Gi2
買って来ました「ドリームウエバーCS5.5スーパーリファレンス」と
「3週間でマスターWebデザインの教室」の2冊、これ見て仕上げる
しかありません。やっと再就職して、よこされたのがこの仕事。
試用期間中だし、だれもウエブの事は知りません。
やるしかありません。
0362nobodyさん2011/12/10(土) 08:57:02.65ID:???
>>361
それと、Perlになんの関係が?
0363nobodyさん2011/12/10(土) 09:12:56.68ID:???
>>362
何がわからないのか、わかっていないやつだな。
0364nobodyさん2011/12/10(土) 09:49:06.29ID:???
      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 ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
0365nobodyさん2011/12/10(土) 16:44:40.44ID:???
最近では、広告も電子化されてしまい、チラシといっても
なかなか通じません。

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

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

>>361
たぶん、それはくびっていう意味だと思うけど。
0366nobodyさん2011/12/10(土) 17:53:31.12ID:bJAhMBsm
Perl CGIで、
WEBページにラジオボタン、チェックボックスを配置して、
保存ボタンで各項目のチェック状態をDBに保存して、
次回ページを表示するときに、前回のチェック状態を再現させたいのです。

DBに保存まではできたのですが、ラジオボタンとかのチェック状態を設定するにはどうやればいいのでしょうか?
0367nobodyさん2011/12/10(土) 18:04:10.96ID:???
>>366
ラジオボタンやチェックボックスなら該当するinput要素に、
checked="checked"
ってすればいいとおもいます。
0368nobodyさん2011/12/10(土) 18:14:29.61ID:bJAhMBsm
>>367
HTMLのコードを出力する時に
if (checked) {
print <input type="radio" checked="checked">
else {
print <input type="radio">
}
とかやるってことですか?
数が多くてすごい大変なんだけど、これ普通のやり方なのかな
0369nobodyさん2011/12/10(土) 18:16:11.86ID:phxklYwZ
>>366

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

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

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

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

まじまだまだ寝てても平気みたいだね
0370nobodyさん2011/12/10(土) 18:18:06.55ID:phxklYwZ
こいつらがやってること全部できる

低レベルすぎる

やっぱりセンスが違うんだなあ
0371nobodyさん2011/12/10(土) 18:23:07.58ID:???
>>368
ヒアドキュメントに変数埋めといて、該当箇所だけにchecked="checked"が展開されるようにするとか、
input要素はループで生成するようにしておいて、if文減らすとか、とか、
0372nobodyさん2011/12/10(土) 18:27:04.72ID:???
保守性とるなら、配列かハッシュにラジオボタンやチェックボックスに必要な内容を入れといて
ループで処理かなぁ。
0373nobodyさん2011/12/10(土) 21:39:06.91ID:???
.emlからbase64の部分だけ正規表現で抽出する方法ってありますでしょうか?
0374nobodyさん2011/12/10(土) 22:10:18.53ID:???
あります。
0375nobodyさん2011/12/11(日) 11:50:08.36ID:???
えっ
0376nobodyさん2011/12/11(日) 12:15:53.32ID:???
なり
0377nobodyさん2011/12/11(日) 16:38:26.87ID:???
>>361
Perlでやれって言われたの?
今から短時間で実装するならPHPしかないんじゃないの。
Perlでテンプレートエンジンとウェブアプリケーションフレームワークの環境構築とかしてる時間はたぶんないんでしょう?
0378nobodyさん2011/12/12(月) 10:19:09.76ID:???
>>373
どなたか具体的な方法をお願いしますです
0379nobodyさん2011/12/12(月) 11:29:18.56ID:8Y5nZNmR
本文なのか添付なのか、plainなのかhtmlなのか・・・
質問がざっくばらんすぎなのでは?
0380nobodyさん2011/12/12(月) 12:26:49.55ID:???
ざっくばらんの使い方おかしくね?
アバウトすぎるとでも言いたいんだろうけど
0381nobodyさん2011/12/12(月) 14:15:46.02ID:???
ページにアクセスすると、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"}

????の部分に思い当たる物が無いので ????\\を消して見てもだめでした。
どういった動きをしているのか、またなぜ失敗しているのかも負えず・・・困っています
宜しくお願いします
0382nobodyさん2011/12/12(月) 18:29:36.74ID:8Y5nZNmR
Google さんで 「LWP::UserAgent ベーシック認証」 でググると、一番上に出てくるんだけどね。
ちゃんと調べろよカス。



use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'http://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('http://www.example.com/secret.html'); って
やる方が好きです。
0383nobodyさん2011/12/12(月) 18:48:35.31ID:???
>>382
どうもありがとう御座います
やってみましたが401が帰ってきました・・・

何でなんだろう?
WWW-AuthenticateにはNegotiateとNTLMって出てるのにorz
0384nobodyさん2011/12/12(月) 19:57:09.04ID:???
NTLM ・・・ Windows認証か ・・・
http://perldoc.jp/docs/modules/libwww-perl-5.813/LWP/Authen/Ntlm.pod
領域名の部分をちゃんと指定すれば、最初のコードで認証できるかと。
とりあえずサーバーにIISを使ってるなら、そう書いた方が良いと思う。
0385nobodyさん2011/12/12(月) 20:04:00.94ID:???
>>384
すみませんサーバー側でIISを使ってるのかどうか 確認はしたのですが、確かではないのでorz
perlのコーディングとは違う質問で申し訳ありませんが、領域名っていうのはいったい何を指定すれば・・・
クライアント側で調べて分かる物なんでしょうか
0386nobodyさん2011/12/12(月) 20:39:55.27ID:???
認証の設定をするときに、サーバー側で設定するもの。
0387nobodyさん2011/12/13(火) 01:38:11.67ID:???
>>380
>>379は日本語がざっくばらんなんですな
0388nobodyさん2011/12/15(木) 18:36:11.15ID:???
Spreadsheet::WriteExcel でエクセルファイルを出力しています。
セルはAからZ列があってそこから先はAA,AB,ACと続くのはご存知だと思います。
このアルファベットを数字に対応させたいと思ってますがアイディアがでませんのでどなたかご教示くださいませ。
1→A ,2→B,26→Z まではできるのですが( chr($_ + 0x60) )、27→AA,28→AB 以降をどうするかがわからないのです。
よろしくお願いいたします。
0389nobodyさん2011/12/15(木) 19:08:41.22ID:???
$c=q{z};print++$c
03903882011/12/15(木) 19:27:18.02ID:???
すいません、説明が不足してました。申し訳ございません。
数字が26なら一発でZに、28なら一発でABに変換したいのです。
0391nobodyさん2011/12/15(木) 20:03:59.53ID:???
再帰処理するサブルーチンでも作れば?
0392nobodyさん2011/12/15(木) 20:45:17.94ID:???
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'
03933882011/12/15(木) 20:50:09.96ID:???
>>392
完璧です。
ありがとうございました。
0394nobodyさん2011/12/15(木) 21:08:20.48ID:???
>>388
Spreadsheet::WriteExcel って、行・列ともに数値で指定できなかったっけ?

http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.37/lib/Spreadsheet/WriteExcel.pm#Cell_notation
0395nobodyさん2011/12/16(金) 07:33:02.00ID:???
ムダナナヤミダッタトイウオチカ
0396nobodyさん2011/12/31(土) 11:42:50.17ID:uq+4+jAH
Perlにかぎったはなしではないのですが、

cgiに送るデータを
index.cgi?user=foo
ではなく、例えば
http://favstar.fm/tweets/popular
のようにディレクトリ風に送って
CGI側で受け取るにはどうすれば良いんでしょうか?
0397日系アメリカ人 ◆japYJPNx6A 2011/12/31(土) 11:53:18.05ID:???
ディスパッチ
0398nobodyさん2011/12/31(土) 11:54:05.80ID:???
PATH_INFO
0399nobodyさん2011/12/31(土) 16:07:44.64ID:???
>>398
ありがとうございます!
0400nobodyさん2011/12/31(土) 17:34:33.56ID:ELwS00/V
http://www.nicovideo.jp/watch/sm16573796
0401nobodyさん2012/01/02(月) 00:05:58.15ID: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」という一文字が入っています
詳しい方、教えてください
0402nobodyさん2012/01/02(月) 00:34:00.94ID:???
$datfile の1行目に改行があるとかじゃないの?

print によるデバッグがしやすいから、面倒でも最初は変数に入れるクセをつけてみると良いかも。
0403nobodyさん2012/01/02(月) 07:39:45.76ID:???
まず use strict しろよ
0404nobodyさん2012/01/02(月) 09:01:46.53ID:???
あとコマンドプロントじゃなくてコマンドプロンプトな。
■ このスレッドは過去ログ倉庫に格納されています