Perlコーディング初心者質問スレ Part 63
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/09/09(金) 18:11:49.71ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2 以降
前スレ http://hibari.2ch.net/test/read.cgi/php/1295170172/
0002nobodyさん
2011/09/09(金) 18:12:10.08ID:???Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://perldoc.jp/
[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/
[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん
2011/09/12(月) 12:01:09.82ID:???{
key1 => 123,
key2 => 456,
},
{
key1 => 324,
key2 => 135,
},
{
key1 => 123,
key2 => 135,
},
続く...
]
こんな感じの配列をソートするにはどういう方法が最適でしょうか?
key1で昇順にソートして、key1が同じ場合はkey2で降順にソートします。
key2も同じ場合はどちらが先になってもかまいません。
0005nobodyさん
2011/09/12(月) 12:40:13.04ID:???0006nobodyさん
2011/09/12(月) 12:51:03.86ID:???0008nobodyさん
2011/09/12(月) 19:06:55.08ID:???基礎の基礎じゃねーか。
0009nobodyさん
2011/09/12(月) 21:12:13.88ID:sQBBrYdo読み込んで表示のみ=ロックの必要はない
読み込んだデータを加工して書き込む場合=
ファイルロック1
ファイル読み込み
データ加工
ファイル書き込み
ファイルロック1の解除
というようにするが正解だろ
読み込んで表示のみにロックする必要あったら
普通のHTMLファイルだってロックしなきゃならんだろ
0010nobodyさん
2011/09/12(月) 21:20:12.75ID:???flockとはなんだったのか
0011nobodyさん
2011/09/12(月) 21:28:34.15ID:???>>1
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
0012nobodyさん
2011/09/12(月) 21:37:37.12ID:???0013nobodyさん
2011/09/15(木) 00:40:46.86ID:???書き込みロックと読み込みロックが
あることぐらい知ってるだろ。
0014nobodyさん
2011/09/15(木) 12:48:03.24ID:???情報を取得しようとしています。
下記だと@はヘッダ?の情報が出てきますが、Aは何も出てきません。
どこか間違えているのでしょうか?
my $url = 'http://example.com';
my $formdata = ['id' => '***', 'pass' => '***'];
my $request = POST($url, $formdata);
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string; #@
print $res->content; #A
#my $tree = HTML::TreeBuilder->new;
#$tree->parse($res->content);
#$tree->eof();
0015nobodyさん
2011/09/15(木) 13:12:03.71ID:???content()はbodyを返す
example.comを見るならば、Content-Length: 0なんで当然content()は空になる
001614
2011/09/15(木) 13:39:08.06ID:???example.comは仮で書いただけなんですが、そのことを書いていませんでした。
失礼しました。
コード的には間違っていないようなので、別の要因を探ってみます。
ありがとうございました。
0017nobodyさん
2011/09/18(日) 03:39:18.09ID:bhwW9jAXforeach $data (@isbn){
if(length($data) != 13){
$error_message = "length error";
break;
}
if($data =~ /[^0-9]/){
$error_message = "charactor error";
break;
}
}
$dataに入っている数字が13文字以外の時と、0-9の数字以外の時に
#error_messageにエラーを書き込んでforeachループを抜けるようにしたいのですが、なぜか13文字&数字だけの時にも両ifともtrueになってしまいます。
先に述べている動作をさせたい時の条件の書き方を教えていただけないでしょうか?
0018nobodyさん
2011/09/18(日) 03:40:47.27ID:bhwW9jAXif(length($data) != 13){
$error_message = "length error";
break;
}
if($data =~ /[^0-9]/){
$error_message = "charactor error";
break;
}
}
見づらいだろうので修正
0019nobodyさん
2011/09/18(日) 04:16:55.44ID:???0020nobodyさん
2011/09/18(日) 04:18:05.84ID:bhwW9jAX失礼しました・・・。
0021nobodyさん
2011/09/18(日) 04:20:28.78ID:???for my $data (@isbn){
if (length $data != 13){
$error_message = "length error";
last;
}
if ($data !~ /^\d+$/){
$error_message = "charactor error";
last;
}
}
次から >>1 には「use strict; use warnings; を必ず使う事」とでも書いとけ。
0022nobodyさん
2011/09/18(日) 06:57:46.48ID:???ってことで break が自作の関数だったりしなくて、ループから抜けることを意図としてるなら
last としませう。
0023nobodyさん
2011/09/18(日) 07:08:32.40ID:???break Break out of a "given()" block.
This keyword is enabled by the "switch" feature: see feature
for more information. Alternately, include a "use v5.10" or
later to the current scope.
0024nobodyさん
2011/09/18(日) 08:49:12.63ID:???Perl以外のほとんどの言語はcontinueやbreakだから
他の言語を先に知っててPerlにあまり馴染みがないと
最初のうちは間違っちゃったりするよね
Perl / C,JavaScript,PHP,Ruby,Python,etc.
next / continue
last / break
0025デフォルトの名無しさん
2011/09/18(日) 09:43:41.96ID:???よさがじわじわと分かる。continue, break だとあいまい
な感じがして、(単語からは)何をしてくれるのか想像しに
くい。
0026nobodyさん
2011/09/18(日) 10:47:25.20ID:???0027nobodyさん
2011/09/18(日) 12:27:04.36ID:???0028nobodyさん
2011/09/18(日) 12:29:59.21ID:???0030nobodyさん
2011/09/18(日) 12:47:06.08ID:???0031nobodyさん
2011/09/18(日) 15:24:44.69ID:???0032nobodyさん
2011/09/18(日) 18:47:48.04ID:???現在SQLを勉強するためにPERLを使いMYSQLにつなぐ練習をしています
DBIを使用してデータベースへの接続およびテーブルを作成することはできました。
このデータを更新する為にユーザーから ユーザーIDおよびパスワード データを新規ユーザー登録フォームなどから受け取るにはどうしたらいいのか、
またデータベースから受け取ったデータから全体のソートをかけたい全表示したい場合 どうしたらいいのかわからず困っています
かってですがURLのところに?userid=foo&password=fooのようにはできるだけ表示しない方向でよろしくお願いします
0033nobodyさん
2011/09/18(日) 20:09:22.61ID:???>>1
http://www.ifdefdebug.com/cgi_introduction/
http://perldoc.jp/docs/modules/CGI-3.49/CGI.pod
依頼されたツールを誰かが作るスレ
http://hibari.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
http://hibari.2ch.net/test/read.cgi/php/1150508106/
DBの絡んだWEB制作の相場
http://hibari.2ch.net/test/read.cgi/php/1004437935/
手伝ってくれるかた募集
http://hibari.2ch.net/test/read.cgi/php/1083303786/
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
0034nobodyさん
2011/09/18(日) 20:29:52.84ID:???すみません・・・リンクの中を見るとフォームのデータはこれでできそうですね
テンプレを読まず・・・申し訳ない
0035nobodyさん
2011/09/19(月) 03:55:08.18ID:tSer8QMIXML::Simpleを使ってXMLを解析しているのですが、 <Creator Role="イラスト">名前</Creator>
のような属性(エレメント?)付きの値を取り出すにはどうすればいいのでしょうか?
普通に~~~->{Creator}->{Role}とすると属性の中身?の"イラスト"は取り出せるのですがその先が分かりません・・・。
もしかして::Simpleでは取り出せないのでしょうか?
0036nobodyさん
2011/09/19(月) 05:24:45.14ID:tSer8QMI~~~{creator}->{content}で中身を取り出すことが出来ました
0037nobodyさん
2011/09/19(月) 07:45:02.88ID:tSer8QMI現在Padreで開発しているのですが、なぜかPadre上ではうまく動いているのですが、
サーバーにUPすると500エラーを吐いてしまいます。
確認してみた所、my $ua = LWP::UserAgent->new();が原因でエラーを吐いているようで、
ライブラリ自体はちゃんと所定の場所にあり、パーミッションも他のライブラリと同じ設(705)で問題は無いはず。
そもそも頭のuse LWP::UserAgent;ではエラー吐いてないのでライブラリ自体は読み込めてるようです。
エラーの無い状態で上記のmy $ua = LWP::UserAgent->new();を追記した時点でエラーになるのですが、
これってただnewしただけでも他の物に影響を与える物なのでしょうか?
0038nobodyさん
2011/09/19(月) 09:21:31.99ID:???http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod
0039nobodyさん
2011/09/19(月) 13:08:32.75ID:tSer8QMIすいません、そこは既にチェックした後だったのですが一向に解決していません
LWP::UserAgentは止めて、LWP::Simpleを使おうとするも今度はuseした時点でエラー・・・。
use LWP::Simple (); にして、後でgetすればエラーでないというのも見かけましたが関係なくエラーが。
0040nobodyさん
2011/09/19(月) 13:24:50.46ID:???0041nobodyさん
2011/09/19(月) 14:01:11.27ID:tSer8QMICan't locate HTTP/Config.pm in @INC
エラー先を見たらUserAgent.pm内の require HTTP::Config; これがエラーの原因のようです
0042nobodyさん
2011/09/19(月) 16:11:08.06ID:tSer8QMILWP:;UserAgent自体が使うファイルも色々CPANから拾ってきておかなきゃだめだったようです・・・というか外部ソース依存多すぎる
そして私の場合、レンタルスペースを利用している為、XML::Parserのコンパイルとか出来ないんですがこの場合どうしたらいいんでしょうか・・・?
0043nobodyさん
2011/09/19(月) 16:24:36.58ID:???> この場合どうしたらいいんでしょうか・・・?
・管理者にインストールしてもらう
・設置先と同じ環境を手元にも構築してコンパイルしたものを持っていく
・設置先で利用できる形にまとめてくれている人を探して一式もらう
・Pure Perl なモジュールのみを使うよう書き換える
・サーバを替える
いずれにしてもスレ違い。
0044nobodyさん
2011/09/19(月) 16:30:26.87ID:???0045nobodyさん
2011/09/19(月) 18:25:25.97ID:???#そして次は「すいません、できないと思ってたけどコンパイルできました」とか書き込まれそうな予感
0046nobodyさん
2011/09/19(月) 20:13:19.63ID:tSer8QMI結局 XML::UserAgent も XML::Simple も使わずに済むPurePerlな XML::TreePP を使う事にしました。
こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。
失礼しました。
0047nobodyさん
2011/09/19(月) 20:32:26.25ID:???> こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。
いえいえ、良い選択だと思います。ご健闘を。
0048nobodyさん
2011/09/19(月) 23:13:46.60ID:???たとえshellが使えなくともtelnet.cgiみたいなのを使って
コンパイルすればいいのだ。
サーバーの環境を特定し、それに近い環境で
自宅コンパイルしたものをアップする方法もある。
諦める必要はないぞ!
0049nobodyさん
2011/09/20(火) 00:23:18.16ID:VRYqCB7t板の中のスレの内容を表示しようというところまできたんですが、カウンターの i が動いていないような感じで、同じスレ(dat)が何回も表示されてしまいます。
ほかにもツッコミどころがあったら教えてください。
ソースは次のレスです。
0050nobodyさん
2011/09/20(火) 00:24:28.62ID:VRYqCB7tuse LWP::UserAgent;
use HTTP::Request::Common;
$url = "http://hidar.2ch.net/news4vip/subject.txt";
$durl = "http://hidari.2ch.net/news4vip/dat/";
&getData($url);
$threadlist = $response->content;
while($threadlist =~ m|\n(.*?)\.dat<>|g){
push(@dat, $1);
}
for ($i=0; $i<=$#dat; $i++){
$url = $durl . $dat[i] . ".dat";
&getData($url);
$content .= $response->content . "\n";
}
print $content;
sub getData
{
$ua = LWP::UserAgent->new;
$ua->agent('');
$request = GET($_[0]);
$response = $ua->request($request);
}
0051nobodyさん
2011/09/20(火) 00:41:47.24ID:VRYqCB7t$url = "http://hidar.2ch.net/news4vip/subject.txt";
$durl = "http://hidari.2ch.net/news4vip/dat/";
はそれぞれ
$url = "http://hibari.2ch.net/news4vip/subject.txt";
$durl = "http://hibari.2ch.net/news4vip/dat/";
でした。別なURLでテストしてたのをごまかしたので、URLが間違っていたせいじゃないです。
ていうかdatディレクトリがそのまま見られるみたいだからそっちから抽出したほうがよかったかな・・・
0053nobodyさん
2011/09/20(火) 00:54:00.21ID:VRYqCB7tできました!
ありがとうございます!!!
0054nobodyさん
2011/09/20(火) 02:27:48.40ID:???use warnings;
この2つは必須!
0055nobodyさん
2011/09/20(火) 21:27:29.45ID:P4zYemZJ初心者なのですが、どなたか教えてください。
サーバーに最新のapache(onWindowsXP)をインストールし、Activeperl(最新版)
によるcgiで、Win32::OLEをつかって、
サーバー側でAccess起動→マクロを走らせる→Access閉じる
を行いたいのですが、上手くいきません。
同じPERLソースで、AN HTTPD だと上手くいくので、apacheの設定の問題だと思うのですが、
どこをどう設定するのかが分かりません。
0056nobodyさん
2011/09/20(火) 21:29:54.54ID:P4zYemZJちなみにソースは
# Accesオブジェクトを生成、起動
my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n";
my $mdb = 'C:/hoge.mdb';
$access -> {'Visible'} = 1;
$access -> OpenCurrentDatabase($mdb);
$access -> DoCmd -> RunMacro('hoge');
$access-> quit();
undef $access;
です。
0057nobodyさん
2011/09/20(火) 21:30:56.13ID:???>>1
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod
Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/
005855
2011/09/20(火) 21:33:07.43ID:P4zYemZJ現象としては、ログにもエラーはなく、サーバー側でタスクマネージャで確認すると
Accessが起動していることまでは確認できるのですが、そのまま止まってしまいます。
タスクマネージャーからAccessを強制終了すると、それ以後のperlスクリプトが処理されるようです。
どなたか同じようなご経験をお持ちの方はおられませんでしょうか。
宜しくお願い致します。
0059nobodyさん
2011/09/20(火) 21:57:09.80ID:???my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n";
は
my $access = Win32::OLE->CreateObject('Access.Application' || die "Cannot create Access object\n$!\n");
と等価なので CreateObject() が偽を返しても die しない。
http://perldoc.jp/docs/perl/5.14.1/perlop.pod#Operator32Precedence32and32Associativity
>>58
「それ以後」がどのステップを指していて処理自体は期待通りに終わっているのかどうか不明なので
同じ症状かは分からんが、「perl Win32::OLE access」でググれば
http://www.kaimei.org/read/internal/perl_w32
> 私が Win32::OLE から Excel へアクセスするプログラムを書いてみたところ、
> Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗するケースがあった。
> きちんとした原因まで把握できていないのだが、少なくともオープンする Excel ファイルのパスは
> / ではなく \ で区切らないとアプリケーション・オブジェクトの取得に失敗するようである。
という話が出てくる。
0060nobodyさん
2011/09/21(水) 12:11:47.99ID:???それぞれの WAF の特色とか違いとかが分かるサイトとかあるのでしょうか?
ご教示いただければと思います。
0061nobodyさん
2011/09/21(水) 15:19:36.21ID:???それをまとめるスレッドリストファイルがある場合のロックについて
ファイルロック1
スレッドNファイルへの書き込み
スレッドリストファイルへの書き込み
ファイルロック1の解除
というようにしなければならないので
例えばスレッド1にだれかが書き込んでいる最中は他スレッドでも書き込みができない
ということになる。
ということで間違いないんですか?
それとスレッドを誰かが見るだけの場合でも
ファイルロック1
スレッドNファイルの読み込み
スレッドリストファイルの読み込み
ファイルロック1の解除
としなければならないので
誰かが任意のスレッドを見ている間はどこのスレッドにも書き込めない
ということでいいんでしょうか?
そうするとロックかかりまくりじゃないんですか?
0062nobodyさん
2011/09/21(水) 15:57:23.72ID:???0063nobodyさん
2011/09/21(水) 16:36:39.63ID:???それぞれのファイルにロックすると
スレッドNファイルには書き込まれて
スレッドリストファイルにロックがかかるという場合も考えられる
そうするとデータの連動がずれる
0064nobodyさん
2011/09/21(水) 16:43:12.02ID:???マルチスレッドプログラミング相談室 その8
http://hibari.2ch.net/test/read.cgi/tech/1253521167/
0066nobodyさん
2011/09/21(水) 20:45:57.38ID:???ロックかかりまくりとはいうけど
実際は各リクエストがケンカしないように順番に処理されていくわけだから特に問題はないだろ。
0067nobodyさん
2011/09/21(水) 21:52:54.67ID:???そいつが全部取り仕切るように動かせばいいんだ。疑似マルチタスクみたいに。
0068nobodyさん
2011/09/22(木) 00:58:45.67ID:???・・という話ではない、これ?
■ このスレッドは過去ログ倉庫に格納されています