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

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

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

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

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

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

お勧めサイトは >>2-10

前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0378nobodyさん2007/07/05(木) 11:46:32ID:???
どうせなら
my ($title,$hoge01,$hoge02) = qw(タイトル 値01 値02);
0379nobodyさん2007/07/05(木) 11:52:22ID:???
書き方としては
my ($title,$hoge01,$hoge02);
で問題無し

書き直すなら>>377に同意
03803762007/07/05(木) 12:03:58ID:???
>>377>>379
どっちでも良いと分かって一安心。
前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
調べる手間はそんなかなぁ、と思ってたけど、結局全部網羅するとなると
大して作業量は変わらないかな・・・。

>>378
それはムチャクチャ長くなりそうなんで、ちょっと勘弁w


アドバイス感謝!
03813782007/07/05(木) 12:15:33ID:???
なにも使うのを1つの my で済ませろって意味ではなくて、
my ($authID, $authPASS, $authEXP) = qw(〜); # 認証関連
my ($htmlTITLE, $htmlSUBTITLE, $htmlCSS) = qw(〜);
のように似てるもの同士でまとめて書くのよ
0382nobodyさん2007/07/05(木) 13:21:28ID:rw6MBlh9
Perl上級者です。すいませんラリって幻覚が見えてるので教えてください。
65,536byteは60KB以上で間違いありませんか?
0383nobodyさん2007/07/05(木) 13:23:29ID:???
しゅくだいはじぶんでやろう!
0384nobodyさん2007/07/05(木) 13:49:32ID:rw6MBlh9
またか。このスレで答えてもらったことねーや( ´ ー ` )
答えたことはあるけどな。>>19>>362の二回だけ。

もういいや。ありがとうございます。たしかGNOME電卓にそんな機能が・・・
0385nobodyさん2007/07/05(木) 13:58:27ID:???
use vars
our
0386nobodyさん2007/07/05(木) 14:05:14ID:???
>>384
スレタイ100回音読して半年ラリってろ
0387nobodyさん2007/07/05(木) 14:06:19ID:???
なんだこいつwwwww
0388nobodyさん2007/07/05(木) 14:08:13ID:???
60KB=61440B
0389nobodyさん2007/07/05(木) 14:10:35ID:???
>>380
>前半同じ名前で後半の数字が違うだけ、って変数名が多いんで
俺も変数名で悩んで、そういう名前をつけてしまうことがたまにあるけど、それはやめたほうがいい。
自分の頭の中でも整理がつかなくなってしまうから。

俺は実は、use strict;してないんだけど、変数名を整理して、局在化して書くことだけ気をつけていれば、
仕様書を書かなければ整理がつかないような大きなスクリプトを書くのならともかく、そんなに問題はないと思うけどね。
03903782007/07/05(木) 14:43:43ID:???
割れば分かるだろ割れば・・・
と釣られてみる
0391nobodyさん2007/07/05(木) 17:42:15ID:/MBCt40Z
benchmarkモジュールがうまく動きません。
use Benchmark;
sub test{ 色々 }
timethis(1,&test);

というplファイルをwinのcmdから実行させると、ちゃんとtest内に掛かれてる処理はされてるようなのですが、

timethis 1: 0 wallclock 〜
なんてことになってしまいます。timetheseでやるとちゃんと秒数が出てくるのに。thisだと出ない。
countを10回にしても実際には一杯時間掛かってるのに1分くらい待って出てくる表示は
timethis 10: 0 wallclock 〜

使い方間違ってますか?お助けくださいませ。
0392nobodyさん2007/07/05(木) 22:09:43ID:???
Benchmarkの各関数に渡せるのは
サブルーチンのリファレンスか
evalして実行できる文字列だけだにょ
03933912007/07/05(木) 22:56:26ID:/MBCt40Z
my $csv = Text::CSV_XS->new({ binary => 1 , "always_quote" => 1});
open FH,"bench.txt";
my @line = <FH>;
close FH;

sub test1{
my %get;
while (@line){
$csv->parse($_);my @fields = $csv->fields();
for (my$i=0 ; $i<=1 ; $i++){
$get{$fields[0]}->[$i] = $fields[$i];
}
}
}

sub test2{
my %get0;
my %get1;
while (@line){
$csv->parse($_);my @fields = $csv->fields();
$get0{$_} = $fields[1];
$get1{$_} = $fields[2];
}
}

timethese(100,{ PatternFast => 'test1', PatternSlow => 'test2',});

おかしいんです。今度はこれまでも0.00秒になってしまう。
どこをどう直せばいいのですか?
0394nobodyさん2007/07/05(木) 23:33:45ID:???
> while (@line){

0.00秒になるのは分からんけど
無限ループだにょ
03953912007/07/06(金) 10:06:20ID:oyGEvxOp
>>394
foreachと間違えました。すいません。危うく死亡するところでした。
benchの中で大助かりです。
ところで無限ループが始まった時って賢い対処法はありますか?
いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?

とりあえず問題は解決しました。benhの花井で卯s。
なんか数がすくないよってことだったらしいです。50000000とかにしたらようやく比較できました。
0396nobodyさん2007/07/06(金) 18:49:11ID:???
半角全角スペースのみの投稿を拒否したいと思ってます。
if($name eq ""){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入");}
if($name eq " "){&er_("名前が未記入!");}


if($name eq "連続する半角全角スペースいっぱい"){&er_("名前が未記入!");}
とやっていくとキリがないです。

そこでパターンマッチ演算子というのを使ってみたのですが↓のであってますでしょうか?
if($name=~ /^ /){&er_("名前が未記入");}#半角スペースが先頭の時
if($name=~ /^ /){&er_("名前が未記入");}#全角スペースが先頭の時

とりあえず判定できてるっぽいですが
もっとスマートな方法があれば教えてください。
0397nobodyさん2007/07/06(金) 19:01:01ID:???
if($name =~ /^( | )*$/){&er_('名前が未記入');}

正規表現ド素人なんであんまり自信ない。
0398nobodyさん2007/07/06(金) 19:03:58ID:???
>>396
フォームに入力される文字がどういう文字なのか(2バイト文字とかを含むのか)とか、
スクリプト中での文字コードの扱いにもよると思うけど、古典的には以下の内容がかなり役立つかと。

http://www.din.or.jp/~ohzaki/perl.htm#JP_RmSpace

# 半角スペース
$space = '\x20';

# 全角スペース
$Zspace = '(?:\xA1\xA1)'; # EUC-JP
$Zspace_sjis = '(?:\x81\x40)'; # SJIS
0399nobodyさん2007/07/06(金) 19:04:41ID:???
>>397
それは2バイト文字の開始位置を誤った場合に誤作動しそう。

連投ごめ
04003962007/07/06(金) 19:07:34ID:???
>>397-399
ありがとうございました。
文字コードについて考えてませんでした。
もう一度見直してみます。
0401nobodyさん2007/07/06(金) 21:30:46ID:???
サブルーチンの質問です。

&hoge($bar);
&hoge($bar{'id'});
&hoge($bar[0]);

sub hoge {
 return $_[0];
}

真ん中の例のように、ハッシュを入れると値が帰ってきません。このような場合に、値を返すようにするには、どう記述するのが
一般的なのでしょうか?(試していませんが、一番下の配列の1要素を入れてもダメかもしれない?)
0402nobodyさん2007/07/06(金) 21:36:05ID:???
shiftしてください
0403nobodyさん2007/07/06(金) 21:46:38ID:???
>>402
&hoge('hoge','hoge');
みたいに呼び出したときに、@_をshiftして呼び出すのはわかるのですが、同じ$_[0]で何故、$barの値は渡るのに、
$bar{'id'}の値は渡らないのでしょうか、という疑問です。
0404401=4032007/07/06(金) 22:04:57ID:???
ごめんなさい。別の部分でポカやってました。
問題は解決しましたが、>>401は依然疑問かも。恐らく
&hoge($bar{'id'});
でも
&hoge($bar[0]);
でも$_[0]に値は入ると思う(思いたい)という、もやもやは残りましたがw
0405nobodyさん2007/07/06(金) 22:20:23ID:???
> ところで無限ループが始まった時って賢い対処法はありますか?
> いつもはwindowsの終了をやってますが、タスクマネージャあけてアプリケーションの終了させればいいだけなのですか?

そんな面倒なことやってるんですか?
パソコンのコンセントを抜くだけですよ!
0406nobodyさん2007/07/06(金) 22:36:49ID:???
レン鯖で今日もまた無限ループやってしまった俺様がきましたよ。
0407nobodyさん2007/07/07(土) 00:38:24ID:???
質問。入力フォームを作っているのですが、postされたデータに対して入力チェックを行い、エラーがある場合は
入力フォームを再度表示して、エラーのある箇所に赤文字でエラーメッセージを出力する。

この板的にはそういうスクリプト書くことが多いと思いますが、そういう場合に便利なモジュールなどはあるのでしょうか?
0408nobodyさん2007/07/07(土) 00:41:55ID:???
>>407
つ rails
0409nobodyさん2007/07/07(土) 08:39:47ID:???
>>399
頭から見て行って、別の文字が混じった時点で失敗するから問題無いのでは?
0410nobodyさん2007/07/07(土) 09:38:06ID:???
ひらがなを半角カタカナに変換する方法はどうしたらいいんでしょうか?
hiraZ2H(STRING)
hiraZ2H(SCALAR REF)
というのが出てきたんですけど使い方がわからないです
0411nobodyさん2007/07/07(土) 10:04:34ID:???
そこまで出て何故悩むんだ…… サブルーチンの使い方が分かんないとか?
0412nobodyさん2007/07/07(土) 10:33:19ID:???
>>411
&jcode'z2h_sjis(\$foo);
で全角の$fooを半角にできました
でもひらがなをカタカナにしないと使えないです
0413nobodyさん2007/07/07(土) 10:53:15ID:???
>>401-404
print qq{$bar \n $bar{id} \n $bar[0]};
sakini kore yatte atai ga tyanto haitteruka checksitemite gomen ime okasiikara konnna kannji dakedo
0414nobodyさん2007/07/08(日) 08:31:07ID:???
>>412
print hira2kata_sjis("あめんぼ赤いなあいうえお");
exit;

BEGIN {
require 'jcode.pl';
my $from_code = 'sjis';
my $kata = 'ァ-ン';
my $hira = 'ぁ-ん';
jcode::convert(\$hira, 'euc', $from_code);
jcode::convert(\$kata, 'euc', $from_code);

sub hira2kata_sjis
{
my $str = shift;

jcode::convert(\$str, 'euc', $from_code);
jcode::tr(\$str, $hira, $kata);
jcode::z2h_euc(\$str);
jcode::convert(\$str, $from_code, 'euc');

return $str;
}
}
0415nobodyさん2007/07/08(日) 11:06:02ID:???
半角カナとダメ文字の扱いに嫌気がさして
shift_jisで書かれたperlスクリプトをeucに変えてるのだけど、
文字コードをeucに変更して保存とjcode.plでshift_jisにしてる部分をeucに変更で
とりあえずは表面的には問題なさそうに見えるのだけど、ちょっと不安。

で、ここから質問なんだけど、他にやっておいた方がいい事とか注意する点とかってあるかな。
0416nobodyさん2007/07/08(日) 11:22:52ID:???
utf8 で書く
化石のようなライブラリを使わない
0417nobodyさん2007/07/08(日) 11:31:27ID:???
charsetの指定ぐらいか。
ぶっちゃけ、どんなスクリプトなのか、どういう人のアクセスを想定しているのか、
ぐらいの情報すら書かずに、ちょこちょこ後出しの駄レスが続くことに嫌気がさしてきた。

不特定多数の携帯からのアクセスがあるならUTF-8はまだダメだろうな。
まぁ、4、5年以上前の携帯だとそもそもEUCもダメなのあるけど。
0418nobodyさん2007/07/08(日) 12:17:04ID:???
???
utf8で書いてshiftjisで吐けばいいじゃん
0419nobodyさん2007/07/08(日) 20:22:14ID:???
レスさんくす。
utf-8はファイルサイズが増えるから・・・って思い込んでたけど思ったより増えないんだね。
これならそっちでも問題ないな。

どんなスクリプトとかアクセス方法によってそんなに変わるもの?
基本抑えておけば色々な場合に対応できると思ってたんだけど、
やっぱノウハウに違いが出てくるのかな。
ちなみにちょっとした掲示板系スクリプトとゲーム系スクリプト混ぜた感じの自作だったり。
アクセス数少ないし多分携帯も問題ない筈。
04204142007/07/09(月) 05:26:23ID:???
>>419
utf8+encodingはバッドノウハウてんこ盛りなので、
もうjcode.pl+EUCで書いててください。
0421nobodyさん2007/07/09(月) 06:10:18ID:???
>>420
jcode.pl+EUCで書いてますがw
perlがいいのは、web上に情報が多いことで、さらに、ある程度化石級の書き方のほうが、
情報量が多くて便利なこともあるような。
0422nobodyさん2007/07/09(月) 10:47:47ID:???
無駄に中途半端な情報も多いけどね。
古いライブラリだと新しい規格に対応してないなど不都合もある。
とりあえずjcode.pl+EUCでいいよ
0423nobodyさん2007/07/12(木) 01:50:40ID:???
speedycgiというのを試してみたのですが、どうしてもrequireしたものが
2度目以降に動作しません。テスト用のpmファイルでは変数は一切使っておらず、
ただprint "test2"としているだけですが、最初の1回だけ出力されます。
main側もただtest1とだけ出力していますが、こちらは毎回出力します。
どのような原因が考えられましょうか。
0424nobodyさん2007/07/12(木) 01:56:28ID:???
サーバ上に置いたファイルをCGIから改名(拡張子含み)させたいのですが、perl関連のページを漁っても
見つかりませんでした…
どうかよろしくお願いしますm(_ _)m
04254232007/07/12(木) 02:01:32ID:???
speedycgiの件、下記のようなコードです。なお、-r1オプションでは正しく動きます。
よろしくお願いします。
#!/usr/bin/speedy -w

use strict;
use warnings;
print "Content-type: text/plain; charset=utf-8\n\ntest";
require './lib/test.pm';

# test.pm
package test; print 'test2'; 1;
04264232007/07/12(木) 02:04:16ID:???
>>424
http://72.14.235.104/search?q=cache:7-pqqTdFRYgJ:www.kent-web.com/perl/chap6.html+perl+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4&hl=ja&ct=clnk&cd=1&gl=jp
0427nobodyさん2007/07/12(木) 02:39:07ID:???
>>425
キャッシュされてるだけのような。
関数で呼び出すようにしたら、どうなん?
0428nobodyさん2007/07/12(木) 02:42:41ID:???
>>426
rename関数を使うのですね。ありがとうございました!
04294232007/07/12(木) 03:13:50ID:???
>>427
関数だとちゃんと出力されました。
グローバル変数の初期化から前述のコードに迷い込んだのですが、
要するに初期化もパッケージの直下にour $a = 0なんて書くのではなく、
INITとか初期化用関数とかを用意しないとならないのですね。
グローバルという言葉をよく理解できてないようです。勉強します。
ありがとうございました。
0430nobodyさん2007/07/12(木) 15:38:50ID:???
携帯電話向けの物なのですが、formで値(例えばapple)を送信すると
http://www.au.kddi.com/test.cgi?atai=apple
のように、受け取った値を利用したURLにアクセスさせたいのですが、

今はやり方が分からずアンカータグを返して1クッション置いているのですが、ダイレクトで表示させるにはどのようにすれば良いのでしょうか?

よろしくお願いします。
0431nobodyさん2007/07/12(木) 16:13:05ID:???
例の通りで良いなら普通にGETじゃだめなの
それでダメならLocationなりで飛ばせばいいじゃない
0432nobodyさん2007/07/12(木) 18:46:36ID:???
jcode.pl関連で質問します。
文字コードをEUC-JPに変換して半角文字を全角文字に変換する場合、

&jcode::convert(\$value,"euc","","z");

これと

&jcode::convert(\$value,'euc');
&jcode::h2z_euc(\$value);

これは、
同じなんですか?
後者のはよく見かけるんですが、
前者のはあまり見かけないような印象があるんですが
何か理由があるのでしょうか?
04334322007/07/12(木) 18:51:01ID:qGszHv4Y
連投すみません。
質問なのにsageてしまったのでage直します。
0434nobodyさん2007/07/12(木) 19:02:56ID:???
ttp://www.srekcah.org/jcode/
もうね・・・
04354322007/07/12(木) 19:23:06ID:???
>>434
&jcode::convert(\$value,'euc');

&jcode::convert(\$line, $ocode [, $icode [, $option]])
の第三と第四の引数(?)を省略した形ということですよね?
だとすると、なぜわざわざ省略したのに
&jcode::h2z_euc(\$value);
とするのかが理解できません。
最初から
&jcode::convert(\$value,"euc","","z");
で良いのでは?と思ってしまうんですが・・・。
0436nobodyさん2007/07/12(木) 19:28:52ID:???
いいから全部読め
0437nobodyさん2007/07/12(木) 20:15:35ID:???
>>431
ありがとうございます。
LocationはJavaScriptのことですよね?携帯端末向けなのでスクリプトは使用できませんm(_ _)m

GETで値を受け取って変数に入れて、それをアンカーで排出することまでは出来たのですが、
ダイレクトでの飛ばし方が分かりません…
0438nobodyさん2007/07/12(木) 20:37:59ID:???
HTTPのLocation
0439nobodyさん2007/07/12(木) 21:49:17ID:???
質問です。
複数あるダウンロード対象を複数選択し、
ダウンロードボタンを押したら順次ダウンロードできるようなものを作りたいんだが
1ファイルダウンロードするのは

print "Content-Disposition: attachment; filename=\"hige\.tar\.gz\"\n";
print "Content-type: application/octet-stream\n\n";

open(FILE, "hige.tar.gz");
binmode(FILE);

while(<FILE>){
print "$_";
}
close(FILE);

でいけるんだけど、複数ファイルとかどうやるか知ってる方いませんか?
0440nobodyさん2007/07/12(木) 22:38:50ID:???
>>439
複数のファイルをサーバで固めてから1回で落とすとか。順次というのは無理っぽい。
まあ、ふつう落とすファイルのリンクを並べたページをまず出力して、クライアント側で1つずつ
クリックして落としてもらうのが妥当なのでは?
それから、
while(<FILE>){
print "$_";
}

print <FILE>;
で済むよ。
0441nobodyさん2007/07/12(木) 22:59:03ID:???
軽いファイルならいいけど、重いファイルはシンボリックリンクを作った方がいいんじゃないかな
0442nobodyさん2007/07/12(木) 23:22:07ID:???
やっぱり無理か・・・
ありがとうございます

固めるのも考えたんですが、素のtar.gzですでに1G超えファイルがあるので
別々にダウンロードしたかったんですね
#サーバが32bitなので最大6Gのファイルしか生成出来ない

そして、現状ひとつずつぽちぽち押してダウンロードする仕様なんですが
それがめんどくさいからまとめようぜ?見たいな乗りになった末での質問でした(_O_)
0443nobodyさん2007/07/13(金) 00:21:04ID:???
STDINからフォームデータを読む場合に、
sysreadを使うのとreadを使うのでは、
一見、同じように見えますが、どういうときに違いますか?
お願いします。
04444432007/07/13(金) 00:34:18ID:???
スレ汚し申し訳ないですが、答えらしきものを見つけたのでクローズします。
ttp://www.tohoho-web.com/lng/199907/99070330.htm
0445nobodyさん2007/07/13(金) 02:24:03ID:???
完全に内部専用なら、tarでまとめてしまうとか…… 無理か。
0446nobodyさん2007/07/13(金) 04:18:38ID:???
32bitだから6GBてどんなシステムだろう…
0447nobodyさん2007/07/13(金) 07:42:31ID:???
どーでもいいけど、そのファイルを読み込んでアウトプットするルーチン
君が言う様な1GBのファイルを読み込んだらメモリが物凄いことになりそうだけどね
バッファを用意してsysreadとかsyswriteでチョコチョコ出す方が良いと思うのだけど
0448nobodyさん2007/07/13(金) 19:25:41ID:rAe1S2vb
mod_perlにトライしています
モジュールとクラスの違いがよく分かりません。
クラスだとnewするので、その分メモリが多く使われるなど
メリット、デメリットってありますか?
0449nobodyさん2007/07/13(金) 19:54:44ID:???
もうね
0450nobodyさん2007/07/13(金) 20:34:44ID:???
大雑把に書くと、
モジュールは外部ファイルを読み込んで実行する機構の、外部ファイル。
クラスはオブジェクト指向プログラミングで使われる、データと操作手順をまとめて雛形にしたもの。
よって比較できない。
0451nobodyさん2007/07/13(金) 20:53:17ID:rAe1S2vb
>>450
共通部分はモジュールかクラスかにするんだな。と単純に考えていて
どっちがいいのかな?と思っていたのですが考え方が違うと。

クラスのほうがスッキリしそうですけど、遅いとかメモリ食うとか
あるのかなと思いました。
0452nobodyさん2007/07/13(金) 20:55:36ID:???
ソースの共有化においてって話し?
0453nobodyさん2007/07/13(金) 22:55:16ID:???
>>451
藻前が言ってるモジュールって言うのは、Perlのモジュールなの?それともApacheのモジュールなの?
0454nobodyさん2007/07/13(金) 22:59:52ID:???
スクリプトの話なんだからApacheじゃないだろう
0455nobodyさん2007/07/13(金) 23:02:35ID:???
>>454
ApacheのモジュールもPerlで書けるとオライリー(Apache拡張ガイド 上)に書いてあったよ。
mod_perl云々言ってるんで、Apache解説本でも読んでるのかと思ったんで一応聞いてみたんだが。
0456nobodyさん2007/07/14(土) 02:19:51ID:???
>>451
たとえを出すと、自動車とタイヤキ型を比べてるようなものだから、
比較が出来ないという話。

それで、オブジェクト指向と非オブジェクト指向のどちらがいいかという質問か?
0457nobodyさん2007/07/14(土) 07:44:47ID:???
>>456
それって例えがちょっと違わね?
クラスの方は型っていうのはほぼ良いとしても、
モジュールは、部品の切り分け方(取り付け方)だから、例えで言えばネジ止めみたいな事じゃね?

つまり、
「鋳造型とネジ止めを比較するようなもので、鋳造された部品だってネジ止めする事はあるから比較できない。」
って感じじゃね?
0458nobodyさん2007/07/14(土) 08:17:22ID:???
うかつにたとえ話をすると
こうやってぐだぐだになるんだよな
0459nobodyさん2007/07/14(土) 13:05:26ID:???
実行効率でクラスにするかモジュールにするか選ぶのはやめとけ。
どうせ違うとしても大した差じゃない。見通しよく書けるかどうか
のほうが重要だよ。
0460nobodyさん2007/07/14(土) 13:23:11ID:XODLozhP
popメールをソケット通信で取ってくるperlスクリプトをサーバ移行しています。
旧サーバでは動いているのが、新サーバでは以下のようなSocket接続でこけています。
$remote = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => $server,
PeerPort => $port,
) || &error("error");

IO:Socket:INETD.pmを1行ずつ進捗printしてみたところ、コンストラクタ(sub new)の
「return $class->SUPER::new(@_);」で止まってしまいます(長い時間かかったあと"error"が帰ってくる)。
この$class->SUPER::new(@_);って親クラスのコンストラクタを
呼び出していると思うんですが、INETD.pmの親クラスって何になるんでしょうか?

perl初心者につき変なこと言ってるかもしれませんが、
よろしくご教授ください。。。
0461nobodyさん2007/07/14(土) 13:40:14ID:???
>>460
ソースを読んでuse baseか@ISAをいじってるところをさがす

or

そのパッケージの@ISA配列の値を調べる
0462nobodyさん2007/07/14(土) 13:50:10ID:???
すでに初心者じゃない件
0463nobodyさん2007/07/14(土) 15:18:54ID:???
>>458
>>451がどれだけドンチキな話をしてるのか理解してもらえればそれでいいのよ。

>>460
IO::Socketが親で、さらに上をたどるとIO::Handle。
04644602007/07/14(土) 15:20:34ID:XODLozhP
>>461
ありがとうございました。親クラスはIO:Socketでした。
今のところ、IO:Socket:connect()まで入ってきているのを確認できたので、
connect()の中を色々探ってみたいと思います。
(connectのどこかで止まっている状態)
04654602007/07/14(土) 15:24:56ID:???
ああ、書き込むの久しぶりだからageちゃった。すみません。
>>464
Hanndleとか行ったりきたりして、今のところ463のような状態なので
引き続き調べます。ありがとうございます。
0466nobodyさん2007/07/14(土) 15:55:23ID:???
die $!とかやらずに&error("error")とかやってんのマゾとしか思えない。
0467トラハムちゃん2007/07/14(土) 16:32:18ID:M6VlwpzH
すいません、ちょっと教えていただきたいのですが、
ユーザーエージェントに「AAA」または「BBB」という文字が
含まれていなかったらエラーを表示したいと思っています。

if(not $ENV{'HTTP_USER_AGENT'} =~ /AAA/) {
&error("エラーです");
}

「AAA」だけでしたら作れたのですが、うまく「BBB」が追加できなくて困っています。
初心者なりにor等を使ってみても、入れ方が悪いのかうまくいきませんでした。
どなたかご教授いただければと思います。
よろしくお願いします。。
0468nobodyさん2007/07/14(土) 16:35:18ID:???
!~ /AAA|BBB/
0469トラハムちゃん2007/07/14(土) 17:14:18ID:M6VlwpzH
>468
できました!
ありがとうございました!!
助かりました!!
0470nobodyさん2007/07/14(土) 17:54:00ID:???
>>466
慣れないうちは、&errorとかサブルーチン作った方が、本人の!可読性がいいと思うし、
webprog的には、エラーが発生したときにブラウザに表示させることも多いので、別に構わないというか
俺はそうしてる。

特殊変数なんかも同じで、慣れないうちは使ってなかった。
foreach my $str (@hoge) { print $str; } みたいに。
04714602007/07/14(土) 18:53:18ID:???
>>460,464の続きです

IO:Socket:connect()の↓のconnect関数から反応が返ってこないということが
分かりました。
if (!connect($sock, $addr)) { }
connect()関数を使うにあたって、
サーバ側で何か設定が必要だったりするでしょうか?
今回自宅サーバのため、同じcgiが動いているレン鯖と何か設定が
違うのかもしれないと思いまして。
もしくは、ポート開放関係?一応メールの110ポートはあけているんですが。。。

すみませんが、よろしくお願いします。
0472nobodyさん2007/07/14(土) 19:05:47ID:???
>>471
「ソケット叩いちゃダメ」のサーバかどうかを確認する必要が
あったりするかもしれません。
04734482007/07/14(土) 19:25:34ID:ybwwq6ev
>>459
その点が気になってたとこです。
実行効率か、可読性かみたいな。
ただ、どっちがどうかは良く分かってませんが。
すんません。
0474nobodyさん2007/07/14(土) 23:24:23ID:???
標準モジュールのNet::POP3使って幸せになろうよ、ねえ
0475nobodyさん2007/07/15(日) 00:16:49ID:tgDYqhX7
ファイルを操作するライブラリを作っているのですが、
普通にやるとアクセス元のcgiのあるフォルダにファイルが作られてしまいます。
ライブラリであるplのあるフォルダにファイルを作りたいのですが、
どのようにすればいいのでしょうか?
0476nobodyさん2007/07/15(日) 00:32:58ID:???
知らんがなw
0477nobodyさん2007/07/15(日) 00:50:43ID:???
馬鹿には聞いてません
■ このスレッドは過去ログ倉庫に格納されています