5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

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

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

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

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

2 :nobodyさん:2011/09/09(金) 18:12:10.08 ID:???
[プログラミング自体の経験が無い奴はまずココを読め]
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

3 :nobodyさん:2011/09/09(金) 19:26:14.96 ID:???
>>1

4 :nobodyさん:2011/09/12(月) 12:01:09.82 ID:???
[
{
key1 => 123,
key2 => 456,
},
{
key1 => 324,
key2 => 135,
},
{
key1 => 123,
key2 => 135,
},
続く...
]
こんな感じの配列をソートするにはどういう方法が最適でしょうか?
key1で昇順にソートして、key1が同じ場合はkey2で降順にソートします。
key2も同じ場合はどちらが先になってもかまいません。

5 :nobodyさん:2011/09/12(月) 12:40:13.04 ID:???
sort { $a->{key1} <=> $b->{key1} || $b->{key2} <=> $a->{key2} } @$aref

6 :nobodyさん:2011/09/12(月) 12:51:03.86 ID:???
ありがとうございます。||こんなのつかえたんですね。

7 :Perl忍者:2011/09/12(月) 18:53:28.33 ID:???
>>5
こいつは上忍級

8 :nobodyさん:2011/09/12(月) 19:06:55.08 ID:???
どあほ、perldoc -f sort に書いてある程度の
基礎の基礎じゃねーか。


9 :nobodyさん:2011/09/12(月) 21:12:13.88 ID:sQBBrYdo
全スレでファイルのロックの質問があったけど
読み込んで表示のみ=ロックの必要はない

読み込んだデータを加工して書き込む場合=

ファイルロック1
ファイル読み込み
データ加工
ファイル書き込み
ファイルロック1の解除

というようにするが正解だろ

読み込んで表示のみにロックする必要あったら
普通のHTMLファイルだってロックしなきゃならんだろ

10 :nobodyさん:2011/09/12(月) 21:20:12.75 ID:???
読み込んでる途中にファイルが書き換えられても困らないんならする必要はないよ





flockとはなんだったのか

11 :nobodyさん:2011/09/12(月) 21:28:34.15 ID:???
>>9-10
>>1
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/

12 :nobodyさん:2011/09/12(月) 21:37:37.12 ID:???
余りに遅レスって批判は出来るにせよ、質問に答えてるじゃん

13 :nobodyさん:2011/09/15(木) 00:40:46.86 ID:???
データベースやってれば
書き込みロックと読み込みロックが
あることぐらい知ってるだろ。

14 :nobodyさん:2011/09/15(木) 12:48:03.24 ID:???
フォームのPOST情報を送ったあとのページを取得し、HTML::TreeBuilderあたりで
情報を取得しようとしています。
下記だと@はヘッダ?の情報が出てきますが、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();

15 :nobodyさん:2011/09/15(木) 13:12:03.71 ID:???
as_string()はHTTP::Responseの全文、つまりheader+body
content()はbodyを返す

example.comを見るならば、Content-Length: 0なんで当然content()は空になる

16 :14:2011/09/15(木) 13:39:08.06 ID:???
>>15
example.comは仮で書いただけなんですが、そのことを書いていませんでした。
失礼しました。

コード的には間違っていないようなので、別の要因を探ってみます。
ありがとうございました。

17 :nobodyさん:2011/09/18(日) 03:39:18.09 ID:bhwW9jAX
すいません、質問です

foreach $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になってしまいます。

先に述べている動作をさせたい時の条件の書き方を教えていただけないでしょうか?

18 :nobodyさん:2011/09/18(日) 03:40:47.27 ID:bhwW9jAX
foreach $data (@isbn){
    if(length($data) != 13){
        $error_message = "length error";
        break;
    }
    if($data =~ /[^0-9]/){
        $error_message = "charactor error";
        break;
    }
}

見づらいだろうので修正

19 :nobodyさん:2011/09/18(日) 04:16:55.44 ID:???
例えばどんな@isbn?

20 :nobodyさん:2011/09/18(日) 04:18:05.84 ID:bhwW9jAX
ほんとにすいません、フォームから送ったデータに改行コードが入ってたせいでおかしくなってたようです
失礼しました・・・。

21 :nobodyさん:2011/09/18(日) 04:20:28.78 ID:???
my $error_message;
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; を必ず使う事」とでも書いとけ。

22 :nobodyさん:2011/09/18(日) 06:57:46.48 ID:???
break は last の誤用だと思われるのだが・・・

ってことで break が自作の関数だったりしなくて、ループから抜けることを意図としてるなら
last としませう。

23 :nobodyさん:2011/09/18(日) 07:08:32.40 ID:???
% perldoc -f break

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.


24 :nobodyさん:2011/09/18(日) 08:49:12.63 ID:???
>>22
Perl以外のほとんどの言語はcontinueやbreakだから
他の言語を先に知っててPerlにあまり馴染みがないと
最初のうちは間違っちゃったりするよね

Perl / C,JavaScript,PHP,Ruby,Python,etc.
next / continue
last / break

25 :デフォルトの名無しさん:2011/09/18(日) 09:43:41.96 ID:???
単語の意味を考えると、Perl で採用した next, last の
よさがじわじわと分かる。continue, break だとあいまい
な感じがして、(単語からは)何をしてくれるのか想像しに
くい。


26 :nobodyさん:2011/09/18(日) 10:47:25.20 ID:???
printlnとか書いてて発狂しないのかな、あっちの言語圏は。

27 :nobodyさん:2011/09/18(日) 12:27:04.36 ID:???
printlnってperlでいえばsayだよな。

28 :nobodyさん:2011/09/18(日) 12:29:59.21 ID:???
あっちの言語圏は変数名と被ると駄目なんだっけ?

29 :nobodyさん:2011/09/18(日) 12:36:42.87 ID:???
>>28
関数名は動詞、変数名は名詞にしましょうねw

30 :nobodyさん:2011/09/18(日) 12:47:06.08 ID:???
形容詞は?

31 :nobodyさん:2011/09/18(日) 15:24:44.69 ID:???
引数

32 :nobodyさん:2011/09/18(日) 18:47:48.04 ID:???
はじめまして
現在SQLを勉強するためにPERLを使いMYSQLにつなぐ練習をしています

DBIを使用してデータベースへの接続およびテーブルを作成することはできました。
このデータを更新する為にユーザーから ユーザーIDおよびパスワード データを新規ユーザー登録フォームなどから受け取るにはどうしたらいいのか、
またデータベースから受け取ったデータから全体のソートをかけたい全表示したい場合 どうしたらいいのかわからず困っています

かってですがURLのところに?userid=foo&password=fooのようにはできるだけ表示しない方向でよろしくお願いします

33 :nobodyさん:2011/09/18(日) 20:09:22.61 ID:???
>>32
>>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/

34 :nobodyさん:2011/09/18(日) 20:29:52.84 ID:???
>>33
すみません・・・リンクの中を見るとフォームのデータはこれでできそうですね
テンプレを読まず・・・申し訳ない

35 :nobodyさん:2011/09/19(月) 03:55:08.18 ID:tSer8QMI
すみません、質問です

XML::Simpleを使ってXMLを解析しているのですが、 <Creator Role="イラスト">名前</Creator> 
のような属性(エレメント?)付きの値を取り出すにはどうすればいいのでしょうか?

普通に~~~->{Creator}->{Role}とすると属性の中身?の"イラスト"は取り出せるのですがその先が分かりません・・・。
もしかして::Simpleでは取り出せないのでしょうか?

36 :nobodyさん:2011/09/19(月) 05:24:45.14 ID:tSer8QMI
失礼、解決しました

~~~{creator}->{content}で中身を取り出すことが出来ました


37 :nobodyさん:2011/09/19(月) 07:45:02.88 ID:tSer8QMI
再度失礼します

現在Padreで開発しているのですが、なぜかPadre上ではうまく動いているのですが、
サーバーにUPすると500エラーを吐いてしまいます。

確認してみた所、my $ua = LWP::UserAgent->new();が原因でエラーを吐いているようで、
ライブラリ自体はちゃんと所定の場所にあり、パーミッションも他のライブラリと同じ設(705)で問題は無いはず。
そもそも頭のuse LWP::UserAgent;ではエラー吐いてないのでライブラリ自体は読み込めてるようです。

エラーの無い状態で上記のmy $ua = LWP::UserAgent->new();を追記した時点でエラーになるのですが、
これってただnewしただけでも他の物に影響を与える物なのでしょうか?


38 :nobodyさん:2011/09/19(月) 09:21:31.99 ID:???
>>37
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod

39 :nobodyさん:2011/09/19(月) 13:08:32.75 ID:tSer8QMI
>>38
すいません、そこは既にチェックした後だったのですが一向に解決していません
LWP::UserAgentは止めて、LWP::Simpleを使おうとするも今度はuseした時点でエラー・・・。

use LWP::Simple (); にして、後でgetすればエラーでないというのも見かけましたが関係なくエラーが。

40 :nobodyさん:2011/09/19(月) 13:24:50.46 ID:???
エラーの内容を画面に表示すればわかるよ。

41 :nobodyさん:2011/09/19(月) 14:01:11.27 ID:tSer8QMI
すいません、use worningsだけじゃエラーが出なかったんですね・・・

Can't locate HTTP/Config.pm in @INC
エラー先を見たらUserAgent.pm内の require HTTP::Config;  これがエラーの原因のようです

42 :nobodyさん:2011/09/19(月) 16:11:08.06 ID:tSer8QMI
まさかと思ってHTTP::ConfigをDLしてきてユーザー固有のフォルダに入れてみたら動きました
LWP:;UserAgent自体が使うファイルも色々CPANから拾ってきておかなきゃだめだったようです・・・というか外部ソース依存多すぎる

そして私の場合、レンタルスペースを利用している為、XML::Parserのコンパイルとか出来ないんですがこの場合どうしたらいいんでしょうか・・・?

43 :nobodyさん:2011/09/19(月) 16:24:36.58 ID:???
>>42
> この場合どうしたらいいんでしょうか・・・?
・管理者にインストールしてもらう
・設置先と同じ環境を手元にも構築してコンパイルしたものを持っていく
・設置先で利用できる形にまとめてくれている人を探して一式もらう
・Pure Perl なモジュールのみを使うよう書き換える
・サーバを替える

いずれにしてもスレ違い。

44 :nobodyさん:2011/09/19(月) 16:30:26.87 ID:???
pure perlな実装で代用すれば良いんじゃね。

45 :nobodyさん:2011/09/19(月) 18:25:25.97 ID:???
コンパイルもできるレンサバに替えるのがいいとおもふ。

#そして次は「すいません、できないと思ってたけどコンパイルできました」とか書き込まれそうな予感

46 :nobodyさん:2011/09/19(月) 20:13:19.63 ID:tSer8QMI
すいません、できないと思ったけどコンパイル・・・という冗談は置いといて、
結局 XML::UserAgent も XML::Simple も使わずに済むPurePerlな XML::TreePP を使う事にしました。

こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。
失礼しました。

47 :nobodyさん:2011/09/19(月) 20:32:26.25 ID:???
>>46
> こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。

いえいえ、良い選択だと思います。ご健闘を。

48 :nobodyさん:2011/09/19(月) 23:13:46.60 ID:???
コンパイルができないと諦めるもんじゃない。
たとえshellが使えなくともtelnet.cgiみたいなのを使って
コンパイルすればいいのだ。

サーバーの環境を特定し、それに近い環境で
自宅コンパイルしたものをアップする方法もある。
諦める必要はないぞ!

49 :nobodyさん:2011/09/20(火) 00:23:18.16 ID:VRYqCB7t
初心者です。2ちゃんの統計を出力するスクリプトを作りたくて、色んな場所からつぎはぎして作っていたのですが、問題がでて進めなくなりました。
板の中のスレの内容を表示しようというところまできたんですが、カウンターの i が動いていないような感じで、同じスレ(dat)が何回も表示されてしまいます。
ほかにもツッコミどころがあったら教えてください。
ソースは次のレスです。

50 :nobodyさん:2011/09/20(火) 00:24:28.62 ID:VRYqCB7t
全部は入らないので関わってると思うところだけ抜きました。

use 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);
}

51 :nobodyさん:2011/09/20(火) 00:41:47.24 ID:VRYqCB7t
ごめんなさい、>>50です。
$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ディレクトリがそのまま見られるみたいだからそっちから抽出したほうがよかったかな・・・

52 :nobodyさん:2011/09/20(火) 00:41:59.51 ID:???
>>50
コードはともかく、とりあえずiはミスタイプで正しくは$iだね

53 :nobodyさん:2011/09/20(火) 00:54:00.21 ID:VRYqCB7t
>>52
できました!
ありがとうございます!!!


54 :nobodyさん:2011/09/20(火) 02:27:48.40 ID:???
use strict;
use warnings;
この2つは必須!

55 :nobodyさん:2011/09/20(火) 21:27:29.45 ID:P4zYemZJ
他のスレからこちらに誘導していただきましたのでここでも質問させていただきます。

初心者なのですが、どなたか教えてください。
サーバーに最新のapache(onWindowsXP)をインストールし、Activeperl(最新版)
によるcgiで、Win32::OLEをつかって、
サーバー側でAccess起動→マクロを走らせる→Access閉じる
を行いたいのですが、上手くいきません。
同じPERLソースで、AN HTTPD だと上手くいくので、apacheの設定の問題だと思うのですが、
どこをどう設定するのかが分かりません。



56 :nobodyさん:2011/09/20(火) 21:29:54.54 ID: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;

です。



57 :nobodyさん:2011/09/20(火) 21:30:56.13 ID:???
>>55-56
>>1
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod
Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/

58 :55:2011/09/20(火) 21:33:07.43 ID:P4zYemZJ
つづきです。最後です。すみません。

現象としては、ログにもエラーはなく、サーバー側でタスクマネージャで確認すると
Accessが起動していることまでは確認できるのですが、そのまま止まってしまいます。
タスクマネージャーからAccessを強制終了すると、それ以後のperlスクリプトが処理されるようです。
どなたか同じようなご経験をお持ちの方はおられませんでしょうか。

宜しくお願い致します。

59 :nobodyさん:2011/09/20(火) 21:57:09.80 ID:???
>>56
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 ファイルのパスは
> / ではなく \ で区切らないとアプリケーション・オブジェクトの取得に失敗するようである。

という話が出てくる。

60 :nobodyさん:2011/09/21(水) 12:11:47.99 ID:???
PSGI に対応した WAF では何が使い易いのでしょうか?
それぞれの WAF の特色とか違いとかが分かるサイトとかあるのでしょうか?
ご教示いただければと思います。


61 :nobodyさん:2011/09/21(水) 15:19:36.21 ID:???
スレッドごとにファイルがあって
それをまとめるスレッドリストファイルがある場合のロックについて

ファイルロック1
スレッドNファイルへの書き込み
スレッドリストファイルへの書き込み
ファイルロック1の解除

というようにしなければならないので
例えばスレッド1にだれかが書き込んでいる最中は他スレッドでも書き込みができない
ということになる。
ということで間違いないんですか?

それとスレッドを誰かが見るだけの場合でも

ファイルロック1
スレッドNファイルの読み込み
スレッドリストファイルの読み込み
ファイルロック1の解除
としなければならないので

誰かが任意のスレッドを見ている間はどこのスレッドにも書き込めない

ということでいいんでしょうか?
そうするとロックかかりまくりじゃないんですか?

62 :nobodyさん:2011/09/21(水) 15:57:23.72 ID:???
それぞれのファイルに対してロックすればいいだろ

63 :nobodyさん:2011/09/21(水) 16:36:39.63 ID:???
>>62
それぞれのファイルにロックすると
スレッドNファイルには書き込まれて
スレッドリストファイルにロックがかかるという場合も考えられる
そうするとデータの連動がずれる


64 :nobodyさん:2011/09/21(水) 16:43:12.02 ID:???
>>61
マルチスレッドプログラミング相談室 その8
http://hibari.2ch.net/test/read.cgi/tech/1253521167/

65 :nobodyさん:2011/09/21(水) 19:47:38.85 ID:???
>>64
スレッドってそのスレッドじゃないと思うんだw

66 :nobodyさん:2011/09/21(水) 20:45:57.38 ID:???
>>61
ロックかかりまくりとはいうけど
実際は各リクエストがケンカしないように順番に処理されていくわけだから特に問題はないだろ。

67 :nobodyさん:2011/09/21(水) 21:52:54.67 ID:???
DBMSみたいに、まとめ役のプロセスが1つだけ起動して、もちろん複数起動しないようにして、
そいつが全部取り仕切るように動かせばいいんだ。疑似マルチタスクみたいに。

68 :nobodyさん:2011/09/22(木) 00:58:45.67 ID:???
ロックには排他ロックと共有ロックがあってだな
・・という話ではない、これ?

69 :nobodyさん:2011/09/22(木) 01:17:49.95 ID:???
シェケナベイベー

70 :nobodyさん:2011/09/22(木) 01:23:50.84 ID:???
>>68
この件は全部排他
横からだけど>>61の解答は気になる

71 :nobodyさん:2011/09/22(木) 12:59:33.86 ID:nJD1QeKS
教えてください
Perlで2chの特定のキーワードのスレを自動取得するCGIを改造したいのですが、

#板名「@BoadName」にある、スレッド名に「$KeyWord」を含む板の一覧を表示する。
$BoardName[0] = "大規模MMO";
$BoardName[1] = "ネトゲサロン";
$BoardName[2] = "ネットwatch";
$Keyword = "●○";

この条件のところで、大規模MMO板だけでなく、例えば
ニュー速等複数の板を指定するにはどういう風にコードを書き換えれば良いでしょうか?
なるべく簡単な方法を教えてください。

スクリプト
http://aceof.s57.xrea.com/?p=sp







72 :nobodyさん:2011/09/22(木) 13:11:19.13 ID:???
>>71
正規表現を使えるようにすればいいんじゃないの。

73 :71:2011/09/22(木) 13:39:16.30 ID:nJD1QeKS
>>72
…?どうやるのでしょうか?
COBOLは昔習いましたが…
条件のところの
$BoardName[0] = "大規模MMO"; を
A(大規模MMO) AND B(ニュー速) のような条件にしたいのですが、
parlでの表記が分かりません。
コードを教えてください。





74 :71:2011/09/22(木) 13:54:59.74 ID:nJD1QeKS
例えば

$BoardName[0] = "大規模MMO" AND "涙目ニュース";

ではエラーになりますよね??



75 :nobodyさん:2011/09/22(木) 14:45:57.55 ID:???
$BoardName[0] = "大規模MMO";
$BoardName[1] = "ネトゲサロン";
$BoardName[2] = "ネットwatch";

$BoardName[3] = "ニュース速報";
$BoardName[4] = "WebProg";

でいいんじゃないかな?
Socket って使ったことないからわかんないけど BoardName で追ってみると
http://www.ff.iij4u.or.jp/~ch2/bbsmenu.html
↑ここから $BoardName[n] でURL取ってるみたいだし
確認してないけど

76 :71:2011/09/22(木) 15:29:52.18 ID:nJD1QeKS
>>75
すみません、基本的に大きな勘違いをしていました

$BoardName[0] = "大規模MMO";  板名
$BoardName[1] = "ネトゲサロン"; スレット名
$BoardName[2] = "ネットwatch"; ?

かと思っていましたが、全部板名で、番号を増やしていけばいいだけですよね^^:

で、
$Keyword = "●○"; の所を2〜3個指定したいんですが、
複数指定したい場合はどう書けば良いのでしょうか?

$Keyword = "●○" "●▲" "××";

$Keyword = "●○" AND "●▲";
  でしょうか?
ANDの代替がぐぐっても分かりません・・・
ちなみにスレ一覧のURLは移動してましたので書き換えます。


77 :nobodyさん:2011/09/22(木) 15:44:33.61 ID:???
>>71-76
【 スクリプト改造依頼スレ 】(丸投げ) part8
http://hibari.2ch.net/test/read.cgi/php/1314546533/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://hibari.2ch.net/test/read.cgi/php/1143834740/
金出すから改造してよvol.3
http://hibari.2ch.net/test/read.cgi/php/1162147035/

78 :71:2011/09/22(木) 16:01:22.71 ID:nJD1QeKS
>>77
ありがとうございます。
あと、条件を複数指定する場合にどう記述すれば良いかだけ教えていただければ
十分なのですが…。
$Keyword = "●○" "●▲" "××";

$Keyword = "●○" AND "●▲";
  でしょうか?

それとも $Keyword = "●○","●▲";





79 :nobodyさん:2011/09/22(木) 16:13:15.01 ID:???
うーん
COBOLをやってたというのがよく伝わってくる思考だw

$Keyword は GetData で

if (/$Keyword/){

というふうに正規表現で使われてるから論理演算子は使えないと思われ
$Keyword を @Keyword にしていっぱい入れられるようにして正規表現で | を使うか
if じゃない関数を使うかじゃないかな〜

80 :nobodyさん:2011/09/22(木) 18:12:10.54 ID:5FtK50r8
読み込んで表示だけのページ=ロックの必要はない

読み込んだデータを更新して書き込むページ=
ファイルロック1
ファイル読み込みモードでオープン
ファイルを配列に読み込み
ファイルを閉じる

データ更新

ファイル書き込みモードでオープン
更新したデータをファイルに書き込む
ファイルを閉じる
ファイルロック1の解除

これでいいはず
仮に読み込んで表示だけのページを
ファイルロック1
ファイルを読み込みモードでオープン
データを配列に入れる
ファイルを閉じる
ファイルロック1の解除とすると
表示するだけのページを開く間は書き込みができなくなるから
そうすると書き込める隙がなかなかない

81 :nobodyさん:2011/09/22(木) 19:43:11.98 ID:7t8BkGQU
use strict;
use warnings;

my @city = ("東京", "大阪", "名古屋");
delete($city[0]);
print "@city";

こんな簡単なので Use of unitialized value in join or string at *** line 6. っていう警告が出たんですが、どうしてですか?
それに Use of unitialized ... というエラーしょっちゅう見かけますが、調べてみてもよくわかりませんでした。
教えてくださいm(_ _)m

82 :nobodyさん:2011/09/22(木) 19:52:11.16 ID:???
delete $city[0]; で undef になった $city[0] を print するのに使ったから

とりあえずexcite翻訳から初めてみたらどうでしょうか

83 :nobodyさん:2011/09/22(木) 20:01:45.61 ID:???
>>81-82
http://perldoc.jp/docs/perl/5.10.0/perldiag.pod

84 :nobodyさん:2011/09/22(木) 20:15:05.37 ID:7t8BkGQU
>>82-83
ありがとうごさいます。
@city = grep($_ ne "", @city);
で $city[0] を消しても残ってたので不便な関数だなと思いました。
undef の値を消すような操作をすればいいんですね。

85 :nobodyさん:2011/09/22(木) 20:16:16.72 ID:???
つshift

86 :nobodyさん:2011/09/22(木) 21:48:02.28 ID:???
$city[0] = "東京" を削除して詰めちゃってもいい ($city[0] = "大阪" とずれていい) なら
shift @city;
要素をずらさずに $city[0] だけ消したいなら
$city[0] = "";

87 :nobodyさん:2011/09/22(木) 21:53:14.20 ID:???
あれ、$city[0] = undef;とdelete($city[0]);って同じ?

88 :nobodyさん:2011/09/22(木) 22:07:16.08 ID:???
>>87
http://perldoc.jp/func/delete
http://perldoc.jp/func/undef

89 :nobodyさん:2011/09/22(木) 23:43:44.90 ID:???
delete が非推奨とか・・・splice で削除しろとか書いてあるけどさ、
巨大な配列に対して splice すると、すごく遅そう・・・

90 :nobodyさん:2011/09/22(木) 23:56:59.38 ID:???
>>89
Perl処理系のソースを見ずに言うが、
そのへんはパフォーマンスがガタ落ちにならん程度にはうまいこと処理してるだろうと思う。

91 :nobodyさん:2011/09/23(金) 00:35:13.51 ID:???
ん?配列の要素に対する delete が非推奨なのは別に問題ないっしょ?
delete $array[$n] は要素を削除するのではなくて、むしろ undef $array[$n] に近いんだから。

92 :nobodyさん:2011/09/23(金) 00:37:24.81 ID:???
spliceは引数多くて邪魔くさい

93 :nobodyさん:2011/09/23(金) 00:38:06.92 ID:???
>>89
誤読すんなよ。

(特殊挙動の切り詰めの事を想定してるなら別だが)
splice で対処しろってのは、要素を本当に削除するケースに関してだ。
@arr = 1 .. 5 ; => @arr = qw( 1 2 5 );

delete の代りなら、
splice @arr, 2, 2, (undef) x 2 なんてしなくても
@arr[2,3] = (undef)x2 ;なりの方法があろう。

94 :nobodyさん:2011/09/23(金) 01:21:24.31 ID:???
8万の配列に長さ1の文字列を入れて、delete、undef、spliceでベンチマーク取ったけど、
spliceが一番遅かったけど大きな速度差は出なかった

95 :nobodyさん:2011/09/23(金) 01:24:44.39 ID:???
>>94
あと1つか2つ桁増やしてよろしく。

96 :nobodyさん:2011/09/23(金) 07:44:14.40 ID:???
use Benchmark qw( timethese cmpthese ) ;
cmpthese timethese ( undef, {
delete => sub{ my @arr = ARRAY ; delete @arr[ 99999 .. 999999] },
splice => sub{ my @arr = ARRAY ; splice @arr, 99999, 900000, (undef) x 900000 },
slice => sub{ my @arr = ARRAY ; @arr[99999 .. 999999] = (undef) x 900000 }
});
__DATA__
ARRAY => (q{x}) x 1000000
Benchmark: running delete, slice, splice for at least 3 CPU seconds...
delete: 3 wallclock secs ( 2.91 usr + 0.15 sys = 3.06 CPU) @ 2.94/s (n=9)
slice: 4 wallclock secs ( 3.17 usr + 0.14 sys = 3.31 CPU) @ 2.72/s (n=9)
splice: 3 wallclock secs ( 3.06 usr + 0.19 sys = 3.25 CPU) @ 3.08/s (n=10)
Rate slice delete splice
slice 2.72/s -- -8% -12%
delete 2.94/s 8% -- -4%
splice 3.08/s 13% 5% --

ARRAY => 1 .. 1000000
Benchmark: running delete, slice, splice for at least 3 CPU seconds...
delete: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 12.82/s (n=40)
slice: 3 wallclock secs ( 3.02 usr + 0.01 sys = 3.03 CPU) @ 6.93/s (n=21)
splice: 3 wallclock secs ( 3.03 usr + 0.07 sys = 3.10 CPU) @ 9.35/s (n=29)
Rate slice splice delete
slice 6.93/s -- -26% -46%
splice 9.35/s 35% -- -27%
delete 12.8/s 85% 37% --


97 :nobodyさん:2011/09/24(土) 11:44:49.89 ID:???
文字コードで分からないことがあるのでご教授お願いいたします。
(utf-8 でソースを書いています)


utf-8 の半角ア -> EFBDB1
utf-16 の半角ア -> FF71

utf-8 でソースを書いているのだから、print "0xEFBDB1" で半角アが出力されるだろうと思ったら、
print "0xFF71" でないと半角アが表示されませんでした。


98 :nobodyさん:2011/09/24(土) 16:12:39.72 ID:???
cryptって絶対に復号化できないんですか?
パスワードをこの関数を使って暗号しようと思っていますが
この関数を使う上で欠点や注意点がありましたら教えてもらえませんか?

99 :nobodyさん:2011/09/24(土) 16:30:15.23 ID:???
>>98
>>1
http://perldoc.jp/func/crypt

100 :nobodyさん:2011/09/24(土) 16:48:02.74 ID:???
>>97
半角のイなら、0xFF72です。

101 :nobodyさん:2011/09/24(土) 18:00:52.20 ID:???
>>97
0xは数値に対してなので、\xだと思いますが、\xは2桁までしか拾わないので、
3桁以上の場合は、{ }を使って\x{123}とする必要があります。

2桁の場合は(\x{00B1}としても2桁と解釈されます)、その値そのもののバイナリ
文字列となります。

print "\xEF\xBD\xB1";

これ↑は、UTF-8として解釈すれば「ア」を意味するバイナリ文字列です。
ただし、Perlがこれを文字列処理するときはISO 8859-1という文字コードの3文字
として扱います。

3桁以上の場合は、その値のUnicodeコードポイント(U+FF71)のテキスト文字列となります。
( Perlは、"\x{FF71}"を「ア」という1文字として扱う)

バイナリ文字列(=バイト文字列)とは、バイト単位で処理される文字列のことです。
テキスト文字列とは、文字単位で処理される文字列のことです。

102 :nobodyさん:2011/09/24(土) 18:01:21.98 ID:???
>>99
リンクありがとう〜 とりあえずこれ使ってみることにします


103 :nobodyさん:2011/09/24(土) 19:43:27.75 ID:???
>>101
ありがとうございます!

104 :nobodyさん:2011/09/26(月) 12:35:58.38 ID:???
トリップを生成する仕組みなんですが、

if (length $handle_pass >= 12)
{
my $mark = substr($handle_pass, 0, 1);
if ($mark eq '#' || $mark eq '$')
{
if ($handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|)
{
$GB->{TRIPSTRING} = substr(crypt(pack('H*', $1), "$2.."), -10);
}

文字列12バイト以上で、先頭が#または$の場合、
$handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|を行なって
cryptによって生成していると思います。

しかし、$GB->{TRIPSTRING}や$1や$2をprintすると何も表示されません。
$handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|では何を行なっているのですか?
教えてください。

105 :nobodyさん:2011/09/26(月) 12:55:07.21 ID:???
>>104
関係ないけど、これ $ から始まる場合何もしてないよね

106 : ◆??? :2011/09/26(月) 13:01:10.88 ID:???
>>104
##0123456789abcdefxx 形式のトリップキーかどうかのチェックだろ

>>105
>>104は書いてないけど実際はelseがある
2chでは今のところ単に予約としてとってあるだけらしいから???になるだけだけど

107 :104:2011/09/26(月) 14:03:37.14 ID:???
>>105-106
ご回答ありがとうございます。
もう一度正規表現を調べますので、
その後、質問させてください。


108 :104:2011/09/26(月) 17:00:08.24 ID:???
先頭が#で始まり16進数文字が16個連続し、
末尾は./0-9A-Za-zのいずれかが0個以上2個以下連続する。

ですよね?

#0123456789abcdefxxは真
#0123456789abcdefxxxは偽
#0123456789abcdefは真

#0123456789abcdefあ が偽なのは、なぜでしょうか?

また、[[:xdigit:]]の[]が二重でくくられている意味を教えてください。

109 :104:2011/09/26(月) 17:01:58.51 ID:???
すみません、書きこんで気づきましたが、

#0123456789abcdefも偽ではないのか?と思います。

110 :nobodyさん:2011/09/26(月) 18:06:25.07 ID:???
あ は [a-zA-Z0-9] かどうか
f の後ろに続く判断が ? なのか + なのかで意味合いが変わってくるかと。

トリップキーの規格をもっかい調べてみればよいかと。

111 :nobodyさん:2011/09/27(火) 00:54:20.16 ID:???
ファイルのロックはmkdirなどでロック用ディレクトリ
を作る方法は良く見かけますがディレクトリではなく
openでロック用ファイルを作るというのは問題があるんでしょうか?

112 :nobodyさん:2011/09/27(火) 01:02:44.10 ID:???
rename とか mkdir はシステムコールを使ってるから、open より割り込まれる余地が少ない。

とかじゃなかったっけ?


113 :nobodyさん:2011/09/27(火) 01:31:29.84 ID:???
>>111
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

今時 flock を使えない環境に出くわす事も稀だがな。
http://perldoc.perl.org/perlport.html#flock

114 :nobodyさん:2011/09/27(火) 02:07:22.29 ID:???
モジュールを作ってて、そのモジュールの中では use utf8 とか、open(my $in, '<:utf8', '〜') とかしてます。

しかし use utf8 してないスクリプトから呼ばれた時には、これだと文字化けが起きてしまいます。
そのため use utf8 されていない場合にはフラグを落として返したいのですが、
モジュールを呼んだスクリプトで use utf8 されてるかどうか調べる方法はあるのでしょうか?


モジュールが特定の文字コードに依存すること自体が駄目だとは分かっては居るのですが・・・


115 :nobodyさん:2011/09/27(火) 04:57:52.69 ID:???
>>112
余地が少ないんじゃなくて余地が無い、
つまり処理がアトミックでないとだめなんだよ。
「余地が少ない」んじゃ意味ないの。

116 :nobodyさん:2011/09/27(火) 11:02:16.14 ID:???
flock(XX, 2)
でデッドロックが発生した場合はどうなるんでしょうか?
あと、待ってる間は自動でsleepしてくれるんでしょうか?

flock(XX, 6)
で自分で実装するのとどちらが良いのか迷ってます。

117 :nobodyさん:2011/09/27(火) 19:02:14.19 ID:???
すいません。プログラムを定刻になると自動で実行するようにしたいんですが、できますか?
レンタルサーバに置きます。
全体を無限ループをしてsleep()で休むというのを考えたのですが、無限ループは一番やってはいけないらしいですね。

あと検索するとすぐJavaScriptで自動更新する方法が出てきますが、
この方法だと時限以外にもCGIにアクセスされたときに実行してしまうと思います。
JavaScriptだけに実行させたいときはパーミッションをどう設定すればいいですか?

118 :nobodyさん:2011/09/27(火) 19:46:39.67 ID:???
>>116
>明白ではないものの、伝統的な flock の動作としては、ロックが得られるまで 無限に待ち続けるものと、単に勧告的に ロックするものの二つがあります。

>>117
cronのことを聞いてる?

119 :nobodyさん:2011/09/27(火) 21:07:32.00 ID:???
>>118
その説明を読んで具体的にどうなるのかが分からなかった
伝統的とか無限とか

・複数のプロセスが待ち状態になった場合に、次にロックを得られる順番は?
・デッドロックかかったらプロセスはどうなるのか
・待ってる間の負荷は

この辺りが気になる。

120 :nobodyさん:2011/09/27(火) 22:48:37.67 ID:???
・複数のプロセスが待ち状態になった場合に、次にロックを得られる順番は?
システムにしか分かりません

・デッドロックかかったらプロセスはどうなるのか
flock を待つオプションで呼び、他のプロセスが死ねばロックは外れるので先に進めますが、
mod_perlなどではプロセスは死なないのでflockは掛かったままになります。
なので、flockを呼ぶときは待たないようにしましょう

121 :nobodyさん:2011/09/27(火) 23:25:00.27 ID:???
flock呼んだ順番になるのか、ランダムになるのかの2択くらいかと思ったんですが、後者って認識でいいです?

無限に待ち続けるとあるんですが、待たないようにする方法もあるんでしょうか?

あと、大量のプロセスが待ち状態になった場合の負荷も気になります。
大人しく待ってるんでしょうか?

122 :nobodyさん:2011/09/27(火) 23:54:57.99 ID:???
unlock時に起き上がったプロセスがロックを取れる
LOCK_NBだ、ドキュメントぐらい読め
sleep以外に何をするのか、それ以前にロック待ちが大量にある時点でどうか

123 :nobodyさん:2011/09/28(水) 01:15:39.74 ID:???
>>117
>>118 の書いているとおり通常はcronを使う。と思う。

> あと検索するとすぐJavaScriptで自動更新する方法が出てきますが、

「プログラムを定刻になると自動で実行」させるのにJavaScriptをどうやって使うの? 意味がわからん。

> JavaScriptだけに実行させたいときはパーミッションをどう設定すればいいですか?

さらに意味がわからん。

124 :nobodyさん:2011/09/28(水) 01:29:17.95 ID:???
>>123
俺は最初、サーバサイドでjavascriptを動かすnode.jsのこと言ってるのかと思った。
cronを扱うためのapiもあるみたいだし。
perl関係ないけど。

125 :nobodyさん:2011/09/28(水) 02:00:23.29 ID:???
>>122
ありがとうございました。
LOCK_NB使わずに待たない方法があると勘違いしてました。
素直に自分で実装します。

126 :nobodyさん:2011/09/28(水) 13:39:10.69 ID:???
ファイルの読み書きでトランザクションを実現するモジュールを apache が標準で持ってくれるとありがたい

127 :nobodyさん:2011/09/28(水) 17:26:59.68 ID:???
ファイルの読み込みは@lines = <IN>で一括して配列に入れていますが
while<IN>で1行ずつ読み込む方がいいんですか?
配列を引数にしたり戻り値にしたりする場合が多いから
どうしても一括読み込みが多くなってしまいますが
一括読み込みだとそんなにメモリの負担になりますか?

ていうか<IN>自体にもファイル全部のデータが格納されているんですよね?

128 :nobodyさん:2011/09/28(水) 18:31:25.70 ID:???
GB単位でファイルを処理する人間だと、while で回すなりの工夫は必要だけど、
今のご時世だったら、殆どの人は気にする事は無いでしょ。

>ていうか<IN>自体にもファイル全部のデータが格納されているんですよね?
そんなスーパーな挙動を取られたら、5GBファイルを 2GB メモリの PC で解析
出来ないじゃないですかっ


129 :nobodyさん:2011/09/28(水) 21:17:17.61 ID:???
一行づつ読み込んだら遅くなる。

130 :nobodyさん:2011/09/28(水) 22:32:03.45 ID:???
% perl -le '$s = q{x} x 1000000 ; $s =~ s/(.{1,50})/$1\n/g; print $s ' > test.txt
% cat hoge.pl
use Benchmark qw( timethese cmpthese ) ;
cmpthese timethese ( undef, {
arr => sub { open my $fh, q{<}, q{test.txt} ; my @arr = <$fh> ; close $fh ; @arr },
whi => sub { open my $fh, q{<}, q{test.txt} ; my @arr ; while (<$fh>){ push @arr, $_ } close $fh ; @arr },
aho => sub { open my $fh, q{<}, q{test.txt} ; my @arr ; for (<$fh>){ push @arr, $_ } close $fh ; @arr },
});
% perl hoge.pl
Benchmark: running aho, arr, whi for at least 3 CPU seconds...
aho: 3 wallclock secs ( 2.76 usr + 0.35 sys = 3.11 CPU) @ 48.87/s (n=152)
arr: 3 wallclock secs ( 2.72 usr + 0.41 sys = 3.13 CPU) @ 56.55/s (n=177)
whi: 3 wallclock secs ( 2.85 usr + 0.30 sys = 3.15 CPU) @ 70.79/s (n=223)
Rate aho arr whi
aho 48.9/s -- -14% -31%
arr 56.5/s 16% -- -20%
whi 70.8/s 45% 25% --


131 :nobodyさん:2011/09/28(水) 22:55:36.32 ID:???
>>130
コメントは大事だよー
whileが一番速いのか 理由は何なんだろうな

132 :nobodyさん:2011/09/28(水) 23:04:50.68 ID:???
whileでファイルの2行目から読み込むのってどうやるんですか?

133 :nobodyさん:2011/09/29(木) 00:01:53.09 ID:???
<FH>;
while (<FH>) {
}

134 :nobodyさん:2011/09/29(木) 00:44:49.60 ID:???
>>131
ファイルがメモリにキャッシュされたから。
最後に書いたほうが早くなる。

135 :nobodyさん:2011/09/29(木) 00:45:39.00 ID:???
訂正
最後に処理されたもののほうが早くなる。

136 :nobodyさん:2011/09/29(木) 00:54:10.24 ID:???
最後も何も2回目以降同じじゃね
仮にキャッシュされてるんなら

137 :nobodyさん:2011/09/29(木) 01:02:01.08 ID:???
>>135
適当に順番入れ替えてやってみ。
結果はほとんど変わらないから。

ていうかよく見たら一番最後に処理したahoが一番遅いじゃねーか。

138 :nobodyさん:2011/09/29(木) 01:09:34.61 ID:???
やっぱり一度に全部読んだほうが2倍以上速かったな。

all => sub { open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')); close $fh ; return split("\n", $buf);},


139 :nobodyさん:2011/09/29(木) 01:35:54.32 ID:???
一度に全部読んだほうが処理がしやすい場合が多い

ファイルの下に行くほど新しい書き込みの場合
最新のn件を表示する場合はwhileで1行ずつは難しいな
@linesに全部読み込んで@linesの配列の後ろからn番までを切り取って表示すれば簡単だな

140 :nobodyさん:2011/09/29(木) 01:40:46.41 ID:???
結局のところ「用途による」だろ

141 :nobodyさん:2011/09/29(木) 01:53:22.20 ID:???
>>139
ファイルの最後の方から読んでいって
改行の数を数えたほうが早いよ。

142 :nobodyさん:2011/09/29(木) 02:22:14.02 ID:???
ファイルの最後の行から上の行に向かって1行ずつ取り出せるの?
ファイル読み込み位置操作できるのseekしか見つからなかったが
これ行単位じゃなく後ろからのバイト数なんだよな

143 :nobodyさん:2011/09/29(木) 02:39:16.38 ID:???
ゆとりか。作れよ。

144 :nobodyさん:2011/09/29(木) 04:40:11.37 ID:???
>>142
http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse

145 :nobodyさん:2011/09/29(木) 06:43:00.87 ID:???
>>137
一応書いとくが、Benchmarkのサブルーチン実行は記載順じゃないぞ。
勝手にソートされる。
もちろん、135の意見に同意するわけでは無いが。

ahoが遅いのは、明白に(<$fh>)の時点でメモリに確保(無名配列への代入と同等)
されてて、その後に@arrにpushしてるから、遅いの当たり前。
サブルーチンの名前が「アホ」な時点でネタだと分る。


146 :nobodyさん:2011/09/29(木) 07:40:54.50 ID:???
AWKのAの人ディスってんの……

147 :nobodyさん:2011/09/29(木) 08:22:35.67 ID:???
>>130
以下は自分の推測。
正しいかはわからない。

@arr = <$fh>;は、まずreadline関数内で、全行のリストが作られ、それが@arrにコピー
されるので「@arr+全行リスト」のメモリを使う。

while (<$fh>){ push @arr, $_ }は、1行だけが$_に入るので、「@arr+1行分」のメモリ
しか使っていない。

メモリ使用量の差が速度差に出たと。

148 :nobodyさん:2011/09/29(木) 11:31:16.87 ID:???
>>130
7.8MB のテキストファイルでぶん回してみた

Benchmark: timing 10000 iterations of aho, arr, whi...
aho: 1337 wallclock secs (1157.39 usr + 103.11 sys = 1260.50 CPU) @ 7.93/s (n=10000)
arr: 1284 wallclock secs (1118.88 usr + 102.05 sys = 1220.92 CPU) @ 8.19/s (n=10000)
whi: 921 wallclock secs (768.06 usr + 104.30 sys = 872.36 CPU) @ 11.46/s (n=10000)
Rate aho arr whi
aho 7.93/s -- -3% -31%
arr 8.19/s 3% -- -29%
whi 11.5/s 44% 40% --


149 :nobodyさん:2011/09/29(木) 16:22:24.12 ID:zOJkGfGB
sendmailとperlで質問です。
メールからプログラムを起動したくて色々設定を行っているのですが
どうにも行き詰ってしまいました。

CentOSにwebminを入れて管理しています。
sendmailにエイリアスを利用してプログラムを起動しようとしているのですがうまくいきません。

とりあえず外部からのメールは受信出来ている状態です。
登録用のエイリアスにプログラムに送ると合わせてユーザーにもメール配信していますが
そちらには届いている事を確認済みです。
smrshについてはリンクを設定済みでエラーは返ってこなくなりました。

この状態で簡単なプログラムを作成して動作確認を行おうとしたのですが
プログラムが動きません。

#!/usr/bin/perl --

open(OUT, ">> datafile.txt");
print(OUT "動作確認\n");
close(OUT);

試しでこのようなコードを置いてるのですが動きません。
プロンプトから動作させた場合は正しくファイルに書き込まれています。

エイリアスの指定の仕方がまずいとかでしょうか?

エイリアス名: "|/usr/bin/perl /var/www/html/プログラム名"
のような感じで指定しています。
直接
エイリアス名: "|/var/www/html/プログラム名"
としてもダメでした。
もしわかるかたがいらっしゃいましたらよろしくお願いします。

150 :149:2011/09/29(木) 16:24:24.50 ID:zOJkGfGB
追記
パーミッションは
プログラム755
書き込み用ファイル666
としています。

151 :nobodyさん:2011/09/29(木) 16:36:26.36 ID:???
まずすべきことは、エラーログを見てみる。

152 :nobodyさん:2011/09/29(木) 16:41:31.46 ID:???
>>149
メールがサーバに届いているなら、/var/log/maillogかなんかに出ているログを確認するというのが基本です。
気になったのは、ファイルパス。シェル上ではログイン時にそのユーザー派のホームディレクトリにカレントパスがセット
されますが、sendmailで受けた場合はそのパスにならないのだから、絶対パスで指定する必要があります。

153 :nobodyさん:2011/09/29(木) 16:41:44.87 ID:???
> open(OUT, ">> datafile.txt");
この datafile.txt はどのディレクトリに書き込まれるの?
パーミッションエラーで書き出せないとかじゃないの?

154 :149:2011/09/29(木) 16:59:53.15 ID:???
>>152,153
盲点でした絶対パスで書いたら問題無く書き込めてました。
ありがとうございました!

155 :nobodyさん:2011/09/29(木) 17:44:48.07 ID:???
結局Perlは関係なかったね。

156 :nobodyさん:2011/09/29(木) 17:51:14.58 ID:???
せやろか?

157 :nobodyさん:2011/09/29(木) 21:10:32.23 ID:???
せのつくあれをやるなんていやらしい

158 :nobodyさん:2011/09/29(木) 21:45:52.72 ID:???
最近じゃ、小学生どうしでもするんですってね、






せいくらべ。

159 :nobodyさん:2011/09/30(金) 03:01:50.06 ID:???
投稿の表示の上にページ数を載せたい場合
最大ページ数=投稿数/1ページあたりの表示数の少数切り上げだから
投稿数がわからないと最大ページ数がわからないわけだから
whileだと最初にwile(<IN>){$toukousuu++;}で投稿数出してそのあとwile(<IN>){表示}の
2回ループしなきゃならないけど@lines一括読み込みなら$toukousuu=@linesのforeach(@lines){表示}の1回ループですむ

160 :nobodyさん:2011/09/30(金) 03:40:56.53 ID:???

   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |       >>159
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /


161 :nobodyさん:2011/09/30(金) 09:23:13.25 ID:???
http://hibari.2ch.net/test/read.cgi/affiliate/1317192380/
akiyan降臨中w

162 :nobodyさん:2011/09/30(金) 12:34:30.65 ID:???
>>160
何で釣り扱いされているのかわからんw
じゃあ例えばファイルの下から10番目までの行であるならばフラグを立てるという場合
while(<IN>){

$aaa = $toukousuu-10;

if($count>=$aaa){
$flg = 1;
}
else{
$flg = 0;
}
$count++;
}
としなければならないが$toukousuuを求めるのはこれよりまえにwhile(<IN>){$toukousuu++;}とする必要が
あるのはわかるだろ。
つまりwhileだとループを2回しなければならんのだよ

163 :nobodyさん:2011/09/30(金) 13:19:30.58 ID:???
             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
   >( c´_ゝ`)  |
            |
>( c´_ゝ`)     J
     >( c´_ゝ`)



             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
             |     >( c´,_ゝ`)
             |
             J   >( c´,_ゝ`)
                    >( c´,_ゝ`)

164 :nobodyさん:2011/09/30(金) 18:04:53.60 ID:???
>>162
うん。そうだね。それで?それがどうかしたの?

って感じ。

165 :nobodyさん:2011/09/30(金) 18:27:33.76 ID:???
>>164
だって2回ループするとその分重くなるじゃん

166 :nobodyさん:2011/09/30(金) 18:55:57.64 ID:???
>>165
どのみち全数読み込まなきゃいけないんだったらもちろん一括読み込みすればいいんだけどさ。
しかし重くなるのが嫌だったら投稿数などのインデックス情報の類は別途保存して、
独立して管理するという方法もあるぞ。
そうすれば $count = @array; みたいにいちいち配列の要素数を数えなくても済む。

167 :nobodyさん:2011/09/30(金) 19:33:37.65 ID:???
>>165
slurp の方が早いよって主張ならまだしも、、、
>>130の結果が理解出来てないだろお前さん。
% perl -le '$s = q{x} x 1000000 ; $s =~ s/(.{1,50})/$1\n/g; print $s ' > test.txt
% cat hoge.pl
use Benchmark qw( timethese cmpthese ) ;
cmpthese timethese ( undef, {
arr => sub { open my $fh, q{<}, q{test.txt} ; my @arr = <$fh> ; close $fh ; printf STDERR "%d\n", scalar @arr ; for ( @arr ){ print STDERR; } },
whi => sub { open my $fh, q{<}, q{test.txt} ; my @arr ; while (<$fh>){ push @arr, $_ } ; close $fh ; printf STDERR "%d\n", $. ; for ( @arr ){ print STDERR; } },
});
% perl hoge.pl 2> /dev/null
Benchmark: running arr, whi for at least 3 CPU seconds...
arr: 4 wallclock secs ( 2.00 usr + 1.23 sys = 3.23 CPU) @ 242.11/s (n=782)
whi: 4 wallclock secs ( 1.95 usr + 1.29 sys = 3.24 CPU) @ 254.94/s (n=826)
Rate arr whi
arr 242/s -- -5%
whi 255/s 5% --


168 :nobodyさん:2011/09/30(金) 20:14:25.09 ID:???
>>166
全部読み込むにしても一括読み込みだとメモリ食うよ
一行ずつ回す方がいい

>>167
読んだけど意味が分からない

169 :nobodyさん:2011/09/30(金) 20:49:46.04 ID:???
165の「重い」ってメモリの重さの話か?
速度の話だと誤読したわ。

速度だと既に結論が出てて、>>130理解してれば、
while(<$fh>){ push @arr, $_ ; } が、@arr=<$fh>;
より早いんだから、後の処理が同じなら何回ループ回そうが、
無関係。カウンタを自分で付けようが、 $. 利用しようが同じ。

メモリ?
んなもん、同じファイルなら、
@arr =<$fh> ;だろうが、一行づつ回そうが誤差範囲だろ。
それを何回回そうが無関係。
@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ;
なんかするんだったら多くかかるのは当然だけど。

sub myps { print `ps ux $$`};
myps;
# お好きなコード
myps;
でもして差分取れば?

170 :nobodyさん:2011/09/30(金) 20:50:40.41 ID:???
×@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ;
◯@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ; } ;


171 :nobodyさん:2011/09/30(金) 21:29:34.48 ID:???
釣りにマジレス
>>159
open my $fh, '<', 'hoge.pl' ;
while ( <$fh> ){ }
print "$.\n" ;
while ( <$fh> ){ print }
close $fh ;
このコードを hoge.pl として保存して実行してみろ。

と言うことで、
>>167
165 の言う「2回ループ」は上のコード、好意的に判断しても
「ファイルハンドル開き直してのファイル読み込み2回」って意味だ。
あなたの突っ込みは通じない。

172 :nobodyさん:2011/09/30(金) 23:04:33.02 ID:???
あれ?まだやってるの?

ほんとうの意味でファイルを一括で読むこっちが
一番速いって答えは出たと思うんだけど。
all => sub { open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')); close $fh ; return split("\n", $buf);},



173 :nobodyさん:2011/09/30(金) 23:07:07.88 ID:???
foreach ( split/\n/, $buf ) {}
はい

174 :nobodyさん:2011/09/30(金) 23:11:26.42 ID:???
もうその話しじゃなくなってんだが、まあ突っ込んでやる。
同等の条件にすると話しにならんくらいarrの方が早い。
cmpthese timethese ( undef, {
arr => sub { open my $fh, q{<}, q{test.txt} ; <$fh> },
all => sub { open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')) ; split(/^/ms, $buf);},
});
結果↓
Benchmark: running all, arr for at least 3 CPU seconds...
all: 3 wallclock secs ( 2.72 usr + 0.36 sys = 3.08 CPU) @ 1366.56/s (n=4209)
arr: 4 wallclock secs ( 1.51 usr + 1.66 sys = 3.17 CPU) @ 30816.72/s (n=97689)
Rate all arr
all 1367/s -- -96%
arr 30817/s 2155% --



175 :nobodyさん:2011/09/30(金) 23:13:06.26 ID:???
174はまちがい
スカラーコンテキストで評価されるわw


176 :nobodyさん:2011/09/30(金) 23:21:35.32 ID:???
まちがい。arrは遅かったw

177 :nobodyさん:2011/09/30(金) 23:22:41.29 ID:???
@arr =<$fh>がファイル一括読み込みよりも
遅いのは当たり前の話で、内部的に一行づつ読み込んでいるから。

178 :nobodyさん:2011/09/30(金) 23:23:54.55 ID:???
同等の条件
arr => sub { my @arr = sub{ open my $fh, q{<}, q{test.txt} ; <$fh> }->() },
all => sub { my @arr = sub{ open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')) ; split(/^/ms, $buf); }->() },
まあ、 all の方が早いわな。

179 :nobodyさん:2011/09/30(金) 23:56:34.45 ID:???
                    亠ァ厂|        `':,;..:..:.';.     ;'..:..:.,:'
                       ‐个 兀          `:;:.::.':.,   ,':.::.:,:'
`.:`.:''''..:.‐ :.:-:.:...,,,, __   、‐-、        __   ,.‐z_,-、   '':;;:::':, ,...;'::..:,;'  ,,.:':
..:..:...:..:..:...:...:...:.:..:...:...:..:.`_,,ノ └¬、'''.:.:‐:..,,ヾ、__)∠,ィク /,、   ';:''..:.:..:..:.:..:.'':;'':.:.,;.
.:..:...:..:..:...:...:...:.:..:...:...:..:.ヾ、_   <^'".:..:..:.:..: <`ヾ´~_  _~´ 〉'''':.::.;':.::...:.:..:..:..:...:.:.';' ,,
..:..:...:..:..:...:...: ,,;,;,;,,;:..:..:.:.:..: / /\ `ヽ、..:..:.:..:..:_ブ∧ ‐ ‐ /.:.:..:,;,::';..:..:..:.:..:..:..:...:.:.:''´:.:
:..:.:..:..,.:-〜' , 、m_)°.:.:.'ー-'..:..:..:`ー--',,;,;::.:.:ヽ、_i (_,/しヘヘ_) ´  '::;.:.::.:..:..:..:..:.:..,;'` ''
,;,,;,;/  <て_;:、。.:° ‐ '''' " ´ ´               ,;:''.:.:,:'' :;,._.:,;.,、:.'':.,,_
  / r'7ァッーヘ、_) ゚                      ,,:''.:.:,:'' , -〜''ヽ‐-‐、.:.:.''
-く  レ'/〈 °   。     ,ヘVフヽ、          ,,:''.:.:.:,:''  (_,ヘ、     ⌒
  V巛〈 ヽ  , 〜''ヽ    / e ヽノ\ヘ.      ,,:.''..::.:,:'' 。     と_刀Tゥー
_/ ヾ ヽ、 Y ァ个〜'。゚  ,少ー- 代ヽ、 ヾゝ   ,,.: '':.:/ヽ、' 。 ゚ (⌒⌒ー-く ノノ,!j
 {.   \ Y巛〈       ) lfgレ゙く  \''.:.::.:.:.:/ / 入 ゚ 。 `〜<ヾヾ、,`⌒ 〜
_, ヘ、  ヾ{ ヾト、      'ヾゝャgメl`   ヾヨ /〃/ _,,>    〉〉ノ `厂丁`
   \  \  ヽ、    `ゞへmfi_  ゞdf‐ '' ´      ////  ノ
─〜 ⌒ヽ、  \   ヽ、    ´`'‐ニ世三r<k´       _,,ノ,〆   /
    __,, へ、 \   ` ー- 、__      _,, --‐‐ ''´     _ - ´  /
 ̄ ̄      \  ` ー- 、 _     ̄ ̄ ̄       _, -〜< -一 ブ
          ヽ、、       ̄` ー─----── ´ ̄    _ -一 ´

180 :nobodyさん:2011/10/01(土) 01:21:20.72 ID:???
>>179
話の流れを追う気はまったくないが
このAAはおめでたさ満点でよかった

181 :nobodyさん:2011/10/01(土) 20:11:38.10 ID:???
画像を送信するときなんかはフォームと画像のデータが1つになった
変数で送られるからwileで1行ずつ回すというのは無理だな
こういう場合は画像が大きければ大きいほど、どうしてもメモリは食う

182 :nobodyさん:2011/10/04(火) 02:02:20.47 ID:???
>>182
まあそうだろうなmalti-partの場合も
read(STDIN,$buff,$ENV{'CONTENT_LENGTH'});
で$buffに全部の送信データが格納されるから
画像が大きいほどメモリは食う

183 :nobodyさん:2011/10/04(火) 04:12:16.99 ID:???
>>182
再帰アンカー/ひとり循環リスト乙

184 :nobodyさん:2011/10/06(木) 12:31:19.56 ID:???
すいません
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
print $data;
だけのスクリプトを書いたんですが
Use of uninitialized value in read at 〜と出ます
これなんでですかね?

185 :nobodyさん:2011/10/06(木) 12:50:34.41 ID:???
>>184
http://perldoc.jp/docs/perl/5.10.0/perldiag.pod

本当にその2行だけなのなら、
-w オプションが効いている下で $ENV{'CONTENT_LENGTH'} を未定義のまま実行したからだろう。

186 :nobodyさん:2011/10/06(木) 13:13:47.41 ID:???
>>185
ありがとうございます。他のところがおかしいんじゃなくてよかったです。
これは入力がなければ出るものなんですね。

187 :nobodyさん:2011/10/06(木) 14:16:31.01 ID:???
>>186
> これは入力がなければ出るものなんですね。
違う。$ENV{'CONTENT_LENGTH'} が未定義 (undef) だから出ている。
STDIN からの入力が無くとも $ENV{'CONTENT_LENGTH'} に 0 が入っていれば出ない。

> Use of uninitialized value%s
> (W uninitialized) 未定義値を、あたかも既に定義されているかのように使用しました。
> これは、"" か 0 と解釈されますが、間違いの可能性があります。
> この警告を止めるには、変数に定義された値を代入してください。

188 :nobodyさん:2011/10/06(木) 15:00:33.35 ID:???
>>184
この「だけのスクリプト」ってのは嘘だな。
CGIとしてだったらこの2行だけでは動かない。

189 :nobodyさん:2011/10/07(金) 00:00:35.18 ID:???
SSI使わずにHTML上にCGI呼び出す方法って<script>タグ以外にありますか?

190 :nobodyさん:2011/10/07(金) 01:23:00.44 ID:???
>>189
<script>タグ勘違いしてる。それはクライアント側での処理だから。
ttかHTML::Templateなどのテンプレートエンジンを考えてみたら。

191 :nobodyさん:2011/10/07(金) 03:51:57.20 ID:???
>>189
img、iframe、cssのimport

192 :nobodyさん:2011/10/08(土) 14:37:18.51 ID:???
https://github.com/motemen/WWW-BBS-2ch
の make test は Result: PASS になり、
SYNOPSIS にあるコードを動かしてみたところ、

Can't call method "add_handler" on an undefined value at /usr/lib/perl5/site_perl/5.10/WWW/BBS/2ch.pm line 39.

と出ました。なので 2ch.pm:39 を見ると、

https://github.com/motemen/WWW-BBS-2ch/blob/master/lib/WWW/BBS/2ch.pm
my $class = shift;
my $self = bless {
ua => LWP::UserAgent->new(agent => "Monazilla/1.00 WWW::BBS::2ch/$VERSION"),
encoding => 'shift_jis',
@_,
}, $class;

$self->ua->add_handler(

という感じです。

Dumper $self->ua; すると undef です。

エディタを開いて試しに自分で
$ua = LWP::UserAgent->new(agent => "Monazilla/1.00 WWW::BBS::2ch/$VERSION");
$ua->add_handler(
とか書くと $ua は取得できて add_handler も動くので CPAN モジュールは問題なく入っているようです。

my $self = bless {} が怪しいのですが、どうすれば WWW::BBS::2ch の SYNOPSIS を動かせるでしょうか。


193 :nobodyさん:2011/10/08(土) 17:51:50.13 ID:???
>>192
$self->{ua} で許して

194 :nobodyさん:2011/10/08(土) 18:24:39.39 ID:???
$self->ua;

sub ua{ }


は定義されてるの?

195 :nobodyさん:2011/10/08(土) 23:56:07.90 ID:???
>>192
どうも https://github.com/motemen/WWW-BBS-2ch の例が間違っているみたい。
| my $bbs = WWW::BBS::2ch->new(cache => $cache, ua => $ua);
ここで $cache, $ua なんて存在しないから。
その通りに入力したら $self->ua は undef になるだろう。ためしに引数無しで
| my $bbs = WWW::BBS::2ch->new;
としたらどうだ。

196 :nobodyさん:2011/10/09(日) 16:35:15.15 ID:???
いまどきCGI.pmって見かけたけど、フレームワーク使えって意味だろうか。
わざわざフレームワーク通すまでもないときはどうするのがモダンなの?


197 :nobodyさん:2011/10/09(日) 17:53:18.28 ID:???
http://cgi-lib.berkeley.edu/ ん?いや、何でもない…

198 :192:2011/10/09(日) 18:49:28.44 ID:???
>>195
うわああ、ありがとうございます!
動きましたぁばばばば。

199 :nobodyさん:2011/10/11(火) 23:38:30.50 ID:Xx0lESYm
間違えて「プログラム技術板」に質問を書いてしまいましたが
此方で改めて質問させて下さい。

その1------------
DBIからのSqlサーバへの接続方法をご教示下さい。
質問場所がここじゃなかったら誘導お願いします。

以下の環境を作成し、
コマンドプロンプトからtest.plをCALLしたのですが
SQLサーバがないとのエラーが表示され、接続出来ませんでした。
値を色々変えてみたりしたのですがどうやっても接続できず…
何が悪いのかお手上げ状態です。

接続文字列が悪いのでしょうか…?

ODBCでの接続は行えており、CSEからのDB参照や
コマンドプロンプトからのsqlcmdコマンドでなら正常にアクセスできます。
[sqlcmd /E /S PC-Name\SQLEXPRESS]

環境
・Windows7
・Microsoft SQL Server 2008
・Perl5.0


Server:PC-Name\SQLEXPRESS
DB:sampleDB
User:user
Password:pass



200 :nobodyさん:2011/10/11(火) 23:39:50.63 ID:Xx0lESYm
-----------------------
test.pl
-----------------------
$dataSource = "dbi:ODBC:".
"driver={SQL Server};".
"Server=(local);database=sampleDB;".
"Trusted_Connection=yes;".
"AutoTranslate=No;";
#データベースに接続
$user="user"; #ユーザ名
$pwd="pass"; #パスワード
$dbh = DBI->connect($dataSource,$user,$pwd)
or die $DBI::errstr;
# データアクセス(今は処理無し)
$dbh->disconnect;
-----------------------
エラー内容
-----------------------
DBI connect('driver={SQL Server};Server=(local);database=sampleDB;Trusted_Connec
tion=yes;AutoTranslate=No;','user',...) failed: [Microsoft][ODBC SQL Server Driver
][Shared Memory]SQL Server が存在しないか、アクセスが拒否されました。 (SQL-08001
) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28
[Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server が存在しないか、ア
クセスが拒否されました。 (SQL-08001) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28.
-----------------------


201 :nobodyさん:2011/10/11(火) 23:40:28.76 ID:???
馬鹿には見えないtest.plが張ってあるらしいな

202 :nobodyさん:2011/10/11(火) 23:48:58.55 ID:Xx0lESYm
その3------------
「その2」を付け忘れてしまいましたが
199-200でワンセットです。

Linux + MySql5.0 + DBIで動作しているシステムを
改造する為のローカルサーバを作成したいので、
どうしてもDBIを使用したいと考えています。

よろしくお願いいたします。


203 :nobodyさん:2011/10/12(水) 01:55:18.70 ID:???
> Server=(local);
この表記はアリなのか?


204 :nobodyさん:2011/10/12(水) 04:13:51.23 ID:???
>>201
そうみたいだね。

205 :nobodyさん:2011/10/12(水) 08:22:59.76 ID:???
よくわからないから外れてるかもしれないけど
sampleDBが文字列じゃなくて変数になってないか?

206 :nobodyさん:2011/10/12(水) 12:30:39.86 ID:???
'' で囲ってみ

207 :199:2011/10/12(水) 18:44:51.34 ID:QKPkC9MD
アドバイス有難うございます。

>>203
Server=(local);
の表記は、ネット上で拾ったやり方をそのまま使っているので
使える…とは思うのですが…。ちなみに、
Server='PC-Name\SQLEXPRESS';
にしても状況変化なしです。

205 206>>
"database='sampleDB';"
に変更してみましたが、変化なしです。


エラーメッセージで
「SQL Server が存在しないか、アクセスが拒否されました」
とあるので、DBではなくServerへの接続が
失敗しているのではないかと思うのですが

Windows7の場合カーネルの違いから挙動が異なる
といった事はありませんでしょうか?


208 :nobodyさん:2011/10/12(水) 19:15:26.58 ID:???
>>207
いっそのこと、ODBC データソース アドミニストレータ で定義してしまいば?

209 :199:2011/10/12(水) 20:45:40.79 ID:QKPkC9MD
>>208
有難うございます!

ODBC経由でDBに接続する事でアクセする事が出来ました(>_<。
ユーザDSNに「dbgSQLServer」の名前でDBを登録し、
$dataSource= "dbi:ODBC:dbgSQLServer";
としたら無事SQLの実行まで確認できました。

直接接続する事にこだわる必要は無かったんですね。
何日も悩んでいた事だったので本当に助かりました。

有難うございました。

210 :nobodyさん:2011/10/12(水) 22:01:53.09 ID:???
>>209
よかったよかった!
Windows+PostgreSQLでDBD::Pgが使えなくて困ったときにそうしたんだ。
その時PgPPどころかCPANもわからなかったあのころ。
車輪何個も作っちゃったけど、キニシナイ

211 :199:2011/10/13(木) 18:35:59.97 ID:???
>>210
本当有難うございました。

PostgreSQLは使ってみようとインストールする時点で
挫折した記憶が…(^^;

プログラムををゴリゴリ書くのは楽しいんですが
何時も環境構築が一番のネックになります。

これでやっとコーディングに入れます♪

212 :nobodyさん:2011/10/17(月) 23:46:25.75 ID:???
ファイルロックについて質問です。

自分は今は rename とか mkdir とか使ってロック機構を実装してますが、
お仕事とかで perl を使ってる人はファイルロックする際には rename とか
mkdir とかでロックかけてるのでしょうか?
それとも flock を使用しているねでしょうか?

「DB 使えや」 ってゆう回答は求めておらず、ファイル読み書き時に於けるロックは、
仕事などではどう対応されているのか気になったもので、質問させていただきました。


213 :nobodyさん:2011/10/18(火) 01:32:44.53 ID:???
確かに「DB使えや」ではあるなw

以前、自分が入社する前に書かれたソースを見たことがあるんだけど、その時はflockを使ってたっぽい。
ただflockすれば良いというものでもなく、きちんとした方法で使わないと全くの無意味だけど。

あと、今ならその辺を上手くやってくれるモジュールがるような気がする。

214 :nobodyさん:2011/10/18(火) 06:58:20.05 ID:???
flockは使えない場合があるので(具体的には自分で調べてくれ)
その場合はmkdirなり使うとかの、別の方法で対処すると思う。
プロとかアマとかはあんまし関係ないんじゃないだろうか。

215 :nobodyさん:2011/10/18(火) 12:47:22.63 ID:???
今のご時世でもflockが使えないとかあるの?

216 :nobodyさん:2011/10/18(火) 16:58:19.77 ID:???
ご時世関係ない

217 : 忍法帖【Lv=16,xxxPT】 :2011/10/18(火) 17:43:19.26 ID:???
>>212
イントラでperl使ってるけど…
ごめん、DB(PostgreSQL)つかってる。
月並みだけど、
DB>flock>その他の手段
だよね。

218 :nobodyさん:2011/10/18(火) 17:48:49.73 ID:???
横槍失礼。
デッドロックに対する対応だけど、
プロセスがkillされるような事態に備えて $SIG でトラップすべきか、
次実行されたときにデッドロックされたファイル情報から指定時間経過してればデッドロックと判断。
どっちがいいんでしょうね。
トラップした方がスムーズにいけるっぽいけど、他の部分で別のトラップがされると実行されない可能性もあったりするんだよね。
迷うわぁ・・・

219 :nobodyさん:2011/10/18(火) 22:08:36.70 ID:???
デッドロックはバグだ。
デッドロックしないようにつくれや

220 :nobodyさん:2011/10/18(火) 22:33:11.15 ID:???
DB使う。

221 :nobodyさん:2011/10/18(火) 22:58:12.17 ID:???
>>219さんは$SIGを適切に設定してる感じですか?

222 :nobodyさん:2011/10/18(火) 23:25:30.92 ID:???
$SIGなの? %SIGじゃないの?

223 :nobodyさん:2011/10/19(水) 00:20:24.38 ID:???
$SIG{} って書いてから {} だけ消したので修正ミスです ^-^;

224 :nobodyさん:2011/10/19(水) 00:46:29.74 ID:LOxxA4S5
GDで文字列を画像に変換するとき
widthを入力しないといけませんよね
全角文字だけなら計算できるのですが、半角英数カナなどが含まれるので余白が発生してしまいます。
あらかじめ文字列の長さをpixelで計算する方法はありませんか?

225 :nobodyさん:2011/10/19(水) 09:54:29.71 ID:???
何も調べずに書くが
cp932に変換してバイト数を調べるのはどうか

226 :nobodyさん:2011/10/19(水) 10:42:15.21 ID:???
>>224
@bounds = GD::Image->stringFT($fgcolor,$fontname,$ptsize,$angle,$x,$y,$string)

227 :nobodyさん:2011/10/19(水) 14:19:45.05 ID:???
>>226
完璧です。ありがとうございました。

228 :nobodyさん:2011/10/21(金) 17:01:48.08 ID:???
GD で機種依存文字を使えるようにするための方法はありますでしょうか

229 :nobodyさん:2011/10/22(土) 05:11:26.88 ID:???
time_%2F_1319178123_%2F_name_%2F_%82r%82%81%81%99%82k%82%85%82%85_%2F_title_%2F_%82%BD%82%A2%82%C6%82%E9.txt

現在ファイルがopenできなくなると言う罠に陥りました。
windows7でこうゆうファイル名なんですが、コレ問題ありますか?
運用はunix系で考えているんでそっちでも問題あれば教えてください。

230 :nobodyさん:2011/10/22(土) 05:13:47.30 ID:???
すみませんなんでもないですopenでしました。

231 :nobodyさん:2011/10/22(土) 09:48:47.25 ID:???
>>230
「き」と「し」を打ち間違えるとは珍しい。

232 :nobodyさん:2011/10/22(土) 20:17:03.51 ID:???
>>229をデコードしたヤシは挙手ノ

233 :nobodyさん:2011/10/22(土) 21:14:46.30 ID:???
Sa☆Lee って何だ?

234 :nobodyさん:2011/10/22(土) 21:57:21.39 ID:???
Sa☆Leeでぐぐったヤシは挙手ノ

235 :nobodyさん:2011/10/22(土) 22:19:39.38 ID:???
なんかの罠かと思ってスルーしてた

236 :nobodyさん:2011/10/24(月) 13:03:32.39 ID:???
ハッシュの中の配列に、値を追加したいときはどうすればできますか?

こうすると
push($h{$i}->[0], "aaa"));

このようなエラーになります。
Type of arg 1 to push must be array (not array element)

237 :nobodyさん:2011/10/24(月) 13:36:02.75 ID:???
push @{$h{$i}}, "aaa";

238 :nobodyさん:2011/10/24(月) 13:50:46.81 ID:???
>>237
上手くいきました。ありがとうございます。
こんな書き方理解できない。もうPerlやりたくない。

239 :nobodyさん:2011/10/24(月) 13:58:00.35 ID:???
同じプログラムをRubyとPHPとPythonでは書き直せるんですけど、
Perlだけ作法が全然違うからわかわからないんですけど、どうすればいいですか?????????

240 :nobodyさん:2011/10/24(月) 15:33:37.66 ID:???
Perl5.14でその配列が既に存在していれば、

use v5.14;
push $h{$i}, "aaa";

でいけるかな?

241 :nobodyさん:2011/10/24(月) 17:29:05.68 ID:???
>>239
全然違うってほどのもんじゃないとは思うけど。
例えばどんなところが書き直せないの?

242 :nobodyさん:2011/10/24(月) 19:39:40.90 ID:???
むしろその中だと、PHP←→Perlが一番簡単な気がするんだw

243 :nobodyさん:2011/10/24(月) 23:41:27.27 ID:???
>>241
ハッシュとか配列とかの操作でカッコとか記号とかが覚えられない。
代入するときも表示するときもアクセスの仕方が違ったりして覚えられない。ダンプするのも一苦労。
クラスのnewのblessとか未だに何なのかわからない。祝福とは???
リファレンスとかスカラーとかレキシカルとか聞き慣れない用語ばかり出てくる。
スコープとかクロージャとかJavaScriptの悪夢がよみがえる。
とにかく記号ばっかりで暗号いじってるみたいな意味不明さが怖い。

$hoge; $hoge{0}; $hoge->{0}; @hoge; @hoge{0}; @hoge->{0}; %hoge; %hoge{0}; %hoge->{0};
${$hoge}; @{hoge}; @{$hoge}; {@{$hoge{0}}} @{$hoge->[0]}; %{$hoge->[0]}; %{$hoge->{0}}

どれだよ!!!!!!!!111111111

244 :nobodyさん:2011/10/24(月) 23:51:16.92 ID:???
独特の表記とか用語に拒否反応ってのはわからんでもないけど、
スコープとかクロージャ駄目ってんじゃ他の言語もまともに使えてないだろ……

245 :nobodyさん:2011/10/24(月) 23:54:49.09 ID:???
>>243
意味不明って、単にPerlを知らないだけでは。
慣れればおいしいよ。

246 :nobodyさん:2011/10/25(火) 00:14:38.50 ID:???
$hoge; スカラ
$hoge{0}; ハッシュ
$hoge->{0}; ハッシュへのリファレンス
@hoge; 配列
@hoge{0}; エラー 配列へのアクセスは $hoge[0] でアクセス
@hoge->{0}; エラー 配列へのリファレンスは $hoge->[0] でアクセス
%hoge; 連想配列
%hoge{0}; 記述エラー 連想配列内の要素は $hoge{0} でアクセス
%hoge->{0}; 記述エラ 連想配列へのリファレンスは $hoge->{0} でアクセス

${$hoge}; スカラのデリファレンス
@{hoge}; エラー
@{$hoge}; 配列のデリファレンス
{@{$hoge{0}}} 連想配列内の配列をデリファレンス ($hoge{0} の中に配列が入っている) ただし外の {} は括る必要なし。 この場合 {} はブロックになる。
@{$hoge->[0]}; 配列へのリファレンスの中の配列
%{$hoge->[0]}; 配列へのリファレンスの中の連想配列
%{$hoge->{0}} 連想配列へのリファレンスの中の連想配列

こんな感じのも良く使うので覚えた方がいいかも。
$hoge = {
  'array' => [], 連想配列へのリファレンスの中に配列を作る
  'hash' => { 連想配列へのリファレンスの中に連想配列へのリファレンスを作る
    'key1' => 'val',
    'key2' => 'val',
  }
};
それぞれへのアクセスは
$hoge->{'array'}->[1];
$hoge->{'hash'}->{'key1'};
となる。

247 :nobodyさん:2011/10/25(火) 00:41:32.32 ID:???
> @hoge{0}; エラー 配列へのアクセスは $hoge[0] でアクセス

エラーではない
が、スライスを理解して使っているわけではなく、たまたま動いているだけ、の初心者が多いと思う

248 :247:2011/10/25(火) 00:42:17.13 ID:???
{} と [] を見まちがえた。ごめん。

249 :nobodyさん:2011/10/25(火) 01:04:32.90 ID:???
@hoge{0} なら %hoge に対するハッシュスライスでしょ
warnings 有効なら @hoge{0} は警告出るだろうが、
@hoge{0..2} とか、 my @keys = (0); @hoge{@keys} なら問題ないはず

250 :nobodyさん:2011/10/25(火) 01:31:51.65 ID:???
指摘のある通り、%hoge; と宣言されてるなら @hoge{0} は動作する。

けどね。
質問者がくじけてる部分を考えたらスライスは考えないほうがいいのでは?
という意味からエラーっていうことにした。

まぁ、言葉が足りなかったってのもあるけど ^-^;

251 :nobodyさん:2011/10/25(火) 01:51:36.00 ID:???
>>246
> @{hoge}; エラー
エラーではない。

全ての変数や関数へのアクセス方法で一番冗長な書き方は sigil { (何か) } ([添え字]|{キー})
の形で、何かが裸の語なら変数名、リファレンスならデリファレンス、
それ以外なら何かの値を名前としたシンボリックリファレンスと解釈される。
通常の変数へのアクセスは、裸の語をデリファレンスすると捉えてもいい。

${ foo } … 通常の変数。{} は*省略可能*。 ${foo} = "foo${foo}foo$foo"; # ok
${ "foo" } … シンボリックリファレンス
${ $foo } … スカラーリファレンス $foo をデリファレンス
${ 'f' . 'oo' } … 式の値を名前としたシンボリックリファレンス
${ \ foo('bar') } … foo('bar') の戻り値のリファレンスのデリファレンス

http://perldoc.jp/docs/perl/5.10.0/perldata.pod#Slices
> (引用注: 添え字/キーの) かっこの種類(大かっこか中かっこか)は、見ているものが配列か
> ハッシュかをつかさどっています。一方、配列やハッシュの先頭の記号 ('$' か '@') は、
> 返ってくるものが単一の値(スカラ)か、複数の値(リスト)かを示しています。

use warnings; my @{foo} = ('a'..'f'); my %{bar} = ('g'..'j');
print ${foo}[3]; # 'd' へのアクセスで "d" を表示
print @{foo}[3]; # 警告有り。('d') へのアクセスで "d" を表示
print @{foo}[3,4]; # ('d','e') へのアクセスで "de" を表示
print ${foo}[3,4]; # 警告有り。リストをスカラーとして評価すると最後の値が返されるので "e" を表示
print ${bar}{'g'}; # 'h' へのアクセスで "h" を表示
print @{bar}{'g'}; # 警告有り。('h') へのアクセスで "h" を表示
print @{bar}{'g','i'}; # ('h','j') へのアクセスで "hj" を表示
print ${bar}{'g','i'}; # キー "g$;i" へのアクセスになるので undef

252 :nobodyさん:2011/10/25(火) 03:20:14.95 ID:???
> print ${bar}{'g','i'}; # キー "g$;i" へのアクセスになるので undef
これだけ知らなかったわ。awk 由来なのかな。
まあ積極的に使う意義は無さそうだし、
人のコードで見かけることもないから覚えなくてもいいよね。

253 :nobodyさん:2011/10/25(火) 22:21:51.58 ID:???
>>243
> クラスのnewのblessとか未だに何なのかわからない。祝福とは???
blessは意味わからないよね。
あれ、祝福とか変な言葉で説明するからわからんのさw
オレ流に説明してあげよう。

まず、これを実行してみよう。Dumperは変数の中身を表示する関数だ。use Data::Dumperが必要。
my $a = {key=>1};
print Dumper($a)

以下のように表示される。(改行インデントは折りたたむ)
そう、ようするにただのハッシュだ。
$VAR1 = {'key' => 1};


次に次の命令を実行してみよう。
my $a = {key=>1};
bless($a, "CLASS");
print Dumper($a)

以下のように表示される。さっきのハッシュの周りにCLASSが追加されている。
VAR1 = bless(  {'key' => 1},  'CLASS' );

つまりだ、これはCLASSという名前のクラス名(モジュール名)付きのハッシュということだ。
このモジュール名付きのハッシュにたいして、以下のように->を使って呼び出しをすると、
$a->foo()

$aにはCLASSというモジュール名が結びついているため、CLASS::foo()を呼び出すんだなとPerl実行環境は理解できる。
その時CLASS::foo()の第一引数に$aを渡すことで、foo()の中で$aの値の操作することが可能にある。

これでCLASSクラスのfoo()メソッド呼び出しの仕組みと、$aをCLASSクラスのインスタンスに変換することができた。

254 :nobodyさん:2011/10/25(火) 22:33:18.24 ID:???
もう一つ、$a->foo() という書き方。

$a に bless使ってCLASSと結びつけたハッシュが入っていれば、
CLASS::foo()が呼び出されるわけだが、

$aは文字列でもよい。つまり、
$a = 'CLASS';
$a->foo();
この方式でもCLASS::foo()が呼び出せる。
通常は、CLASSを$aに入れずにそのまま書いて、CLASS->foo() となる。

でこれが foo()じゃなくて new() だと、CLASS->new() となる。
呼び出されるのは、当然CLASS::foo(); そして foo() の第一引数にはCLASSという文字列が入っている。

これを利用してCLASS::newされた時に、CLASSに結びつけたハッシュ、
つまりCLASSのインスタンスを返すことで、Perlにおけるnewの仕組みとなる。

あと余談。殆どの場合ハッシュにCLASSを結びつけるのだが、
別にただの値にCLASSを結びつけるのも一応可能。

255 :nobodyさん:2011/10/25(火) 22:34:03.01 ID:???
訂正
×呼び出されるのは、当然CLASS::foo(); そして foo() の第一引数にはCLASSという文字列が入っている。
○呼び出されるのは、当然CLASS::new(); そして new() の第一引数にはCLASSという文字列が入っている。


256 :nobodyさん:2011/10/25(火) 22:36:14.83 ID:???
> あと余談。殆どの場合ハッシュにCLASSを結びつけるのだが、
> 別にただの値にCLASSを結びつけるのも一応可能。


ただの値にblessはできんか。
何かしらの値のリファレンスにblessできる。

257 :nobodyさん:2011/10/25(火) 23:11:45.61 ID:???
system("wget $url");
を使ってファイルをダウンロードしたいのですがうまくいきません。
perl というかwget の使い方の問題なのかもしれませんが、
適切な書き方をご存知のかたがいらっしゃったらおしえていただけませんか?

ダウンロードしたいファイルは以下のURLです。
ttp://ncode.syosetu.com/txtdownload/dlstart/ncode/108715/?no=1&hankaku=0&code=utf-8&kaigyo=CRLF

エラーとしては、こう言われます。
index.html?no=2&hankaku=0&code=utf-8&kaigyo=CRLF: Invalid argument
Cannot write to `index.html?no=2&hankaku=0&code=utf-8&kaigyo=CRLF' (Invalid argument).

258 :nobodyさん:2011/10/25(火) 23:53:11.13 ID:???
自分は、たまーにハッシュに名前が欲しくて bless する事もあるw

use LWP::Simple;
my $data = get('URL');

特に認証がなければ、これで取得できるかと。

自分は

use LWP::UserAgent;
use HTTP::Request::Common;
use utf8;
my $ua = LWP::UserAgent->new;
 〜agent とか timeout とか max_redirect とか cookie の設定〜
my $req = GET('URL');
my $res = $ua->request($req);
my $content = $res->code() eq '200' ? decode('utf-8', $res->content()) : '';

ってやってる。
手順が多いけど、自分の頭ではこの方が使いやすい。

$res->code() eq '200' の部分は $res->is_success とかで置き換えられるけど、回線がパンパンのときに失敗すると
is_success は 1 を返すので信用出来ない。
HTML の取得なら、$res->content() に </html> が含まれるかどうかで判断した方が良い。
つっても、殆どの場合は is_success や is_error は正しく動作する。

259 :nobodyさん:2011/10/26(水) 01:13:19.12 ID:???
>>257
wget は特に指定がなければサーバのパスに対応するファイル名でローカルに保存しようとするから、
? はファイル名に使えねえよと言われてるのでは。Windows ないから試せないけど。

>>258
sub is_info ($) { $_[0] >= 100 && $_[0] < 200; }
sub is_success ($) { $_[0] >= 200 && $_[0] < 300; }
sub is_redirect ($) { $_[0] >= 300 && $_[0] < 400; }
sub is_error ($) { $_[0] >= 400 && $_[0] < 600; }
sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
# HTTP::Status より。

失敗したにもかかわらず is_success が真を返すというなら、
まず疑うべきは LWP でなくサーバ側のレスポンスでは?
原因がクライアント/サーバ/回線/他のいずれにせよ、
負荷等が原因で200以外の2xxが返ってくる状況なんてちょっと想像つかんが。

decode('utf-8', $res->content()) はよっっっぽど古いバージョンの LWP じゃない限り
$res->decoded_content(charset => 'utf-8') のほうがよかろ。

260 :nobodyさん:2011/10/26(水) 01:38:17.35 ID:???
>>259
失敗なのに is_success が成功を返すのは少々特殊な状況なのは分かってる。

自宅でサーバー動かしてて家のルータは BA8000Pro なんだけど、BitTorrent で Linux ISO を放流してる。
バージョンアップがくるとコネクションがすごい数やって来て、NAT のテーブルが溢れて (上限は 2600)
名前解決すら頻繁に失敗するほど不安定になる。

この状況下で LWP で GET とかすると is_success が成功を返しても、->content() が全てを受け取ってないという事が起こる。

そのほかの環境は弄らずに BitTorrent だけ止めると LWP は正常に送受信できる。
これは何度も再現するのはテスト済。

ちなみに BitTorrent を動かしてるのは WEB サーバーとは別の PC です。
最近は BitTorrent 動かしてないからこういった症状ともおさらばで快適人生♪



>> decoded_content
おぉ〜、こんなメソッドあったんですね。ありがとう!
常々 Encode 呼び出すのめんどくせーって思ってたんで助かる。


261 :nobodyさん:2011/10/26(水) 02:43:24.74 ID:???
>>259
>>257です。
アクセスが出来ないじゃなくて、書き込みができないっていう意味だったんですね。
もっと自分でよく考えてみるべきでした。

-Oオプションを付けて書き込むファイル名を指定したところ上手くいきました。

知恵を貸していただきありがとうございます。

262 :nobodyさん:2011/10/27(木) 00:59:33.75 ID:???
>>244-256
あんなふざけたレスにマジレス返してくれてどうもありがとうございます。
まだ全部は試せてないですが、>>246とか物凄く参考になっています。
perldoc.jpなども読んで、もう少し勉強してみますね。

263 :nobodyさん:2011/10/27(木) 01:39:37.97 ID:???

変数名の前の @、$、% の意味 (* ってのもあるけど、難しいので放置で OK)
変数に代入するときの { }、[ ]、( ) の意味を覚えるだけで、理解度はかなり違うと思います。

あとは perl の自由な書き方に慣れていただくしかw

264 :nobodyさん:2011/10/27(木) 16:41:18.27 ID:???
たまに間違う… そういえばあんまり代入の時に [ ] って使わないなあ。
使ったことがないわけじゃないんだけど。

265 :nobodyさん:2011/10/27(木) 18:34:30.14 ID:???
最近は面倒くさいので $data = [] とか $data = {} とかで済ますこと多いな。


266 :nobodyさん:2011/10/28(金) 20:00:02.80 ID:???
Perlでw3mのようなコンソールアプリケーションを作る方法はあるのでしょうか?
環境はLinuxです。

よろしくお願いいたします。

267 :nobodyさん:2011/10/28(金) 20:16:08.47 ID:???
curses を扱うモジュールはあるみたいだし、できるんじゃね
Python とかのほうが向いてる気はするけど

268 :nobodyさん:2011/10/30(日) 22:07:34.60 ID:???
みなさんモデリングツールでUMLは使ってますか?
もし使ってる方はどのソフト使ってますか?

ttp://hibari.2ch.net/test/read.cgi/tech/1147499933/
↑ここでperlの話題がなく、「perl uml」で検索してもそれらしいものが見つからなかったので質問しました。
UMLを勉強しようと思うのですがどのツールがいいのかもわかりません。。

269 :268:2011/10/31(月) 00:15:05.76 ID:???
>UMLを勉強しようと思うのですがどのツールがいいのかもわかりません。。

これはココだとスレ違いですね。
この一文は無視して下さい。

270 :nobodyさん:2011/11/01(火) 11:30:50.31 ID:???
バイナリデータについて質問です。
docomo携帯の太陽のSJIS絵文字コード(F89F)を表示しようとしたのですが、
(1)は表示されて、(2)は単なる文字列になっているようでした。
\x{}といった表記ではバイナリにならないのでしょうか?
また、バイナリにする場合、""での設定やpack()など色々あると思うのですが、
処理が速いのはどの方法になるのでしょうか?

(1)my $sun = "\xF8\x9F"

(2)my $sun = "\x{F89F}"


271 :nobodyさん:2011/11/01(火) 13:02:20.96 ID:???
>>270
http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators
> If the number is 256 (0x100, 0400) or above, Perl interprets it as a Unicode code point
> and the result is the corresponding Unicode character.

http://www.nttdocomo.co.jp/service/developer/make/content/pictograph/basic/

よって iモードの Shift_JIS で "\xF8\x9F" に割り当てられている絵文字を
iモードの UTF-8 のページで出したければ "\xEE\x98\xBE" 。
(Perl用語で言うところの) Unicode 文字列なら "\x{E63E}" 。

参考ページ:
>>2
http://perldoc.jp/docs/perl/5.10.0/perluniintro.pod
http://search.cpan.org/dist/Encode-JP-Mobile/lib/Encode/JP/Mobile.pm
http://search.cpan.org/dist/Unicode-Japanese/lib/Unicode/Japanese/JA.pod

272 :270:2011/11/01(火) 15:15:58.07 ID:???
>>271
解決しました。
詳しい説明ありがとうございました。

273 :nobodyさん:2011/11/01(火) 15:20:02.29 ID:???
my $a = {
x => [ 'a', '1' ],
y => [ 'b', '2' ],
z => [ 'c', '3' ],
};

my $b = map{}???

上記で$bに下記のようにセットするにはmapのところをどのように書けばよいでしょうか。

$b = {
x => 'a-1',
y => 'b-2',
z => 'c-3',
};

274 :nobodyさん:2011/11/01(火) 15:36:36.16 ID:???
>>273
$b = { map { $_ => "$a->{$_}[0]-$a->{$_}[1]" } keys %$a };
# or
$b = { map { $_ => join '-', @{ $a->{$_} }[0,1] } keys %$a };

275 :nobodyさん:2011/11/01(火) 15:59:53.49 ID:???
>>273
my $b = { map ref $_ ? join('-', @$_) : $_, %$a };
my $b; %$b = map ref $_ ? "$_->[0]-$_->[1]" : $_, %$a;

276 :273:2011/11/01(火) 16:40:41.18 ID:???
>>274,275

解決しました。
回答が早くて助かりました。
ありがとうございます。

277 :nobodyさん:2011/11/01(火) 17:31:41.93 ID:???
サンプルとはいえ$aと$bは安易に使わないほうがいいぞ

278 :273:2011/11/01(火) 17:56:13.77 ID:???
use HTML::Template について質問です。
テンプレートファイル内で、「html出力させないコメント」というのは書けないのでしょうか?
例えば下記の#の行はoutputで出力させないといった動作をさせたいです。
もしできないのであれば、使用されている皆さんはコメントを書きたい時、<!-- -->で対応しているのでしょうか?

<html>
<head>
<title>hoge</title>
</head>
<body>
fuga<br>
#コメントを書きたい
</body>
</html>

279 :nobodyさん:2011/11/02(水) 04:52:21.99 ID:???
>>278
無かったはず。

ただし、new()の際にfilterを設定することで、前処理を行うことが出来る。
これを利用して、特定の文字列を置き換える(削除する)ことは可能。
詳細はドキュメントを参照されたい。

HTML::Templateは痒いところに届かないというか、痒み?何それ? って作り方だからなあ。
非PGのデザイナーにテンプレートファイル作りを任せるなら、これくらいじゃないと使ってくれなかったりするがw


280 :nobodyさん:2011/11/02(水) 07:58:44.36 ID:???
>>276
案の定Wikipediaの丸暗記か

281 :nobodyさん:2011/11/02(水) 10:15:20.86 ID:???
>>280
君はまた見えない敵を作って、勝手に戦うのかい?

282 :デフォルトの名無しさん:2011/11/03(木) 03:59:56.91 ID:???
>>280

おみそれいたしました。
丸暗記だと応用が効かなくて行き詰ってしまうことが多いです。

283 :nobodyさん:2011/11/03(木) 20:45:59.15 ID:???
↓こちらのスレで誘導されてこの板に来ました。

Perlについての質問箱 49箱目
http://hibari.2ch.net/test/read.cgi/tech/1319953460/100-102n

Windows 2000、Activeperl 5.8 の環境で、
use Socket;
socket(・・・);
connect(・・・);
な感じでインターネット上のwebサイトからページを取得してるんだけど、
サイトの応答が遅いとき、応答が帰ってくるまでCPU負荷が100%近くになる。

これってどういった原因が考えられますか?
あるいは仕様でしょうか。
PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが、それにしても負荷高すぎかな、と。

Activeperlのバージョン上げれば直るのかな…

284 :nobodyさん:2011/11/03(木) 22:20:35.11 ID:???
パソコンを変えることができないなら、LANカードを取り替えるか
あるいは追加して、それを使うようにして対処。
今使っているLANカード+ドライバが割込みに対応した作りではない
のでCPU負荷が100%近くになっている。

285 :nobodyさん:2011/11/03(木) 22:28:37.56 ID:???
>>PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが
端折るな


ちなみに Pentium3 1GHz、ActivePerl 5.12 のうちの環境は sleep 使うと CPU 占有率が 80-90% とかになる。


286 :nobodyさん:2011/11/03(木) 22:52:53.96 ID:???
>>284
LANカードの問題ですか。
ノートだから交換や追加は難しいですね…
>>285
すみません。
Pen4M1.8G(但し1.2G動作)です。

ありがとうございました。

287 :285:2011/11/03(木) 23:57:43.11 ID:???
NetBurst か。
デスクトップの Pentium4 ですら同じくロックまで落とすと Pentium3 に負けるからなぁ・・・
ただそれ以外の部分 (チップセットとかね) は Pentium3 世代よりも上だから、CPU はボトルネックとは考えられないか。

古いノートだったら 10Base-T とかの可能性も否定できないよね。

あとアンチウイルスとかスパイウェア関連は外すのも手。
TCP/IP の入出力を監視してたりするので負荷が掛かるのは当たり前だから。

定期的にスクレイピングのために Perl スクリプト走らせてるんだけど、
今見たら 60-80% の CPU 占有率だった。


これ以上はハードとか OS の問題になってきそうなのでスレ違いどころか板違いすらにもなってくるかな?w
その前に色々書いておく。

特に大事なデータが無ければ OS 再セットアップして、アンチウイルスとかスパイウェア関連は入れない。

もし直らなければ、ノートの製造が AOpen や Acer などの安かろう悪かろう的なメーカーでないか確認。
なおかつ使用チップセットが Intel 以外だった場合は遅いのはハードウェアが原因と見て良いかと。

上記以外のメーカーで Intel チップセットの場合は >>284 が書いたとおり LAN カードが怪しいかも?
USB の LAN もあるけど、そもそも負荷が高いので使っちゃだめ。 32bit CardBus が付いてるならその LAN カードを。

これでも駄目なら投げ捨てる。

288 :nobodyさん:2011/11/04(金) 00:21:01.33 ID:???
CD起動のLinuxで同じスクリプトを実行してハードの問題かどうかを切り分けてみる。

289 :283:2011/11/04(金) 08:21:22.37 ID:???
>>287
ハードやOSの問題だと板違いですね。
ただ、ブラウザでアクセスしている場合にはそういった問題は発生しないのでperl側の問題という線も捨てきれないのかな、と。

ちなみに、常駐系のソフトは全て停止しても状態は同じでした。
とりあえず、まずはLANカードの線で、何か試す方法がないか検討してみます。

>>288
ちょっとハードルが高いですね。
Linixの知識は全くないので、そこにたどり着くまでの時間が取れそうにないです。

改めてありがとうございました。

290 :278:2011/11/04(金) 11:25:15.47 ID:???
>>279
最初に任意のルーチンの割り込みができるんですね。
いまバタバタしてるので時間が空いたらじっくり調べてみます。
ありがとうございました。

291 :nobodyさん:2011/11/05(土) 11:43:23.98 ID:???
>>289
BIOSのIRQの設定も板違いですね。
そうだとするとLANカードを変えても同じことになりそうなので。

292 :nobodyさん:2011/11/06(日) 08:06:31.58 ID:???
$test . '_aiueo'

こうゆう文字列でマッチさせようとしたときに、何も考えずに書けば

/$test_aiueo/

だけど、これじゃ $test_aiueo っていう変数は無いからエラーになるわけで、
$test という変数の直後に半角英数でマッチさせるにはどうすれば良いのでしょうか?


293 :nobodyさん:2011/11/06(日) 08:12:06.72 ID:???
すんません解決しました。

/${test}_aiueo/

こうゆう書き方できるんですね。
$hash={} を %{$hash} とか普段から使ってるクセに、なんですぐに書けなかったんだろう。。。


294 :nobodyさん:2011/11/06(日) 10:03:01.99 ID:???
こういう

295 :nobodyさん:2011/11/06(日) 12:03:43.66 ID:???
作ったスクリプトのどこの部分が処理に時間が掛かってるのか知りたいです。

処理ごとにデバッグプリントすれば可能ですが、非現実的だし、
後々デバッグプリントを消すのも手間なので、Perlでどこの部分で
時間が掛かってるとかのデバッグというか、トレースというか、
そういう事は出来るモジュールなどはあるのでしょうか?



296 :nobodyさん:2011/11/06(日) 12:30:01.91 ID:???
>>295
http://perldoc.jp/docs/perl/5.10.1/perlfaq3.pod#How32do32I32profile32my32Perl32programs63

297 :nobodyさん:2011/11/07(月) 11:15:35.01 ID:???
>>296
ありがとうございます。


#!/usr/bin/perl -d
use Devel::DProf;

で tmon.out を吐かせた後に dprofpp で得たいデータが取れました。


298 :278:2011/11/07(月) 14:03:34.80 ID:???
以前html::templateで質問したものです。
>>278の件は解決できました。
ありがとうございました。

もう一つ質問があります。
TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、下記のようなテンプレートはNGとなっています。

<TMPL_INCLUDE NAME="<TMPL_VAR NAME=incPath>">

そこでfilterを使って表現しようと思うのですが、どのようにすればよいでしょうか?
※cgi内の変数がfilter内のサブルーチンでそのまま使用できるのは確認できています。

my $incPath = './tmpl/inc.tmpl';
my $template = HTML::Template->new(
filename => './aaa.tmpl',
filter => sub{
my $ref = shift;
$ref =~ s/(\$[a-zA-Z0-9_]+)/eval($1)/g; #←ここの置換後の表現が思いつかないのでやりたいことのイメージを書いています。
},
);

--- template ---
<TMPL_INCLUDE NAME="$incPath">

299 :298:2011/11/07(月) 17:02:01.60 ID:???
>TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、

すみません。この一文はわかりづらいですね。
この文は無視してください。

300 :nobodyさん:2011/11/08(火) 02:25:10.62 ID:???
>>298
コメント削除の件は解決して何より。

インクルードファイルを動的に制御するなら、素直に<TMPL_IF>や<TMPL_UNLESS>で分岐させるのが良いのでは。
もしくは、CGI側で別途に読み込んで、<TMPL_VAR>で吐き出すか。

インクルードファフィルのルートディレクトリを指定するだけなら、
new()の時に path を指定することでコントロールできるっぽい。


【余談】
HTML::Templateは条件分岐がマトモに書けないから、可能なら拡張モジュールの利用も考えてみて。
自分は使ったことがないんだけど
http://search.cpan.org/~samtregar/HTML-Template-Expr-0.07/Expr.pm
とかどうだろうか


301 :298:2011/11/09(水) 16:21:33.08 ID:???
>>300
もしかして279の方ですかね?
またまたご意見ありがとうございます。

色々試行錯誤しましたが、今回はfilterに下記のようにして対応することにしました。
$replace_ref = {
HENSUU => 'hogehoge',
};

filter{
$ref = shift;
$$ref =~ s|\[\#.*?\#\]||gxms; # [# 〜 #]までをコメント
$$ref =~ s|\[\%\s+([a-zA-Z0-9_]+)\s+\%\]|$replace_ref->{$1}|gxms; # [% 〜 %]を置き換え
}

----- html -----(どんなフォーマットがHTMLに影響ないかわからなかったので変数置き換えはtemplate-toolkitを参考)
<html><body>
[# コメント #]
変数=[% HENSUU %]
</body></html>
---------------

HTML::Template::Exprいいですね。
HTML::Template::Proにも取り込まれてるんで、高速化したい時には置き換えが簡単そう。
HTML::TemplateはIF文が貧弱すぎる。

302 :nobodyさん:2011/11/15(火) 20:21:14.83 ID:???
パターンマッチについてなのですが、

-------------------
<span class="availGreen">在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp</a></b> が販売、発送します。 ギフトラッピングを利用できます。
-------------------
この文字列(実際には改行は入っていない)から、「Amazon.co.jp」(他の店名になることもある))の部分だけを取り出す為に

if ( $_ =~ />(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすると、
-------------------
在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp
-------------------
までが拾われてしまいます。

if ( $_ =~ /この商品は、<b><.*?>(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすることにより、目的は達成できたのですが、何故最初のがダメなのかが良くわかりません。

なお、直前の「643004」の部分は場合によって変わるのでキーワードには出来ません。

303 :nobodyさん:2011/11/15(火) 20:47:48.16 ID:???
何故って…
.*?にはタグ(<.*?>)を含まないなんてルールはないし

304 :nobodyさん:2011/11/15(火) 21:30:08.07 ID:???
最小マッチの「最小」の意味を勘違いしてるパターンと予想。
.*? か .* かで影響されるのは "</a></b> が販売" の部分の探し方であって、
マッチすること自体が確定したら最初の ">" の位置は動かない。

関係ないが、この手の情報取得は可能ならまずAPIを検討すべき。
泥臭くスクレイピングするとしても、よほど高速性を重視するとかでなければ
正規表現じゃなくてTreeBuilderとかでDOMをパーズするほうが安全。

305 :nobodyさん:2011/11/16(水) 00:15:29.63 ID:???
>>304
ありがとう。
最初の「>」で拾ってしまうんですね。

高速性の必要なものではなく、いくつかの商品の価格変化をログ取ってるだけなので、
API利用するところまでは考えてません。手続きめんどいので。

306 :nobodyさん:2011/11/16(水) 06:46:36.29 ID:???
>>305
拾いたい箇所が1ファイルに1箇所くらいで構造も単純ならパターンマッチングの方が
手っ取り早いよね。
でも構造が繰り返しだったりややこしかったりする時はWeb::Scraperとか便利よ。

>>304
パーズ? パース? ← parse

307 :nobodyさん:2011/11/16(水) 07:50:11.05 ID:???
考えるの面倒だからという理由で、モジュールに丸投げする底辺でゴメンナサイ

308 :nobodyさん:2011/11/16(水) 09:59:12.27 ID:???
そのためのモジュールでしょ 無問題

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

310 :nobodyさん:2011/11/16(水) 16:16:46.49 ID:???
>>309
>イギリス英語

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

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

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

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

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

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

314 :nobodyさん: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さん:2011/11/17(木) 00:27:12.12 ID:???
やっぱ、なんかしらで回すしか無いですよね。
ありがとうございました。

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

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

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

っていう程度です。


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

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

321 :nobodyさん: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さん:2011/11/18(金) 21:56:27.18 ID:???
覚えることが少なくなるように同じ記法を採用しているだけで、
それを解釈するコードは文字列と正規表現では別物だと考えて
ください。

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

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

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

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

326 :nobodyさん: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さん:2011/11/26(土) 22:49:02.08 ID:???
>>326
http://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さん:2011/11/26(土) 23:51:55.90 ID:???
そのスクリプトを手元で実行したことはあるかい?

330 :nobodyさん: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: http://redhat6/test.html
とか出てます。Systemを実行しなければこのメッセージは出ないです。


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

335 :nobodyさん: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さん:2011/11/27(日) 04:36:05.90 ID:???
>>335
だからそう書いてるだろ。

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

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

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

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

340 :326: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: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: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さん:2011/11/28(月) 16:28:04.90 ID:???
>>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/

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

質問は取り消します。

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

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

346 :nobodyさん:2011/11/30(水) 10:51:48.72 ID:???
perldoc.jp

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

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

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

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

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

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

ついでに350ゲト

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

352 :nobodyさん: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さん: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: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さん:2011/12/08(木) 17:01:30.14 ID:???
>>1を読むこともできないようじゃあ何もできないだろうねえ

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

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

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

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

360 :nobodyさん: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さん:2011/12/10(土) 08:57:02.65 ID:???
>>361
それと、Perlになんの関係が?

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

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

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

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

374 :nobodyさん:2011/12/10(土) 22:10:18.53 ID:???
あります。

375 :nobodyさん:2011/12/11(日) 11:50:08.36 ID:???
えっ

376 :nobodyさん:2011/12/11(日) 12:15:53.32 ID:???
なり

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

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

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

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

381 :nobodyさん: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 => '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'); って
やる方が好きです。

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

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

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


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

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

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

133 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)