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

Perl コーディング初心者質問コーナー Part33

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/03/01 02:46ID:1GeWO7LH
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0413nobodyさん04/03/14 12:54ID:YQY2sb9a
もうひとつ聞きたいのですが、

今作ってるBBSのタイトルや文字色などの設定はsetting.cgi

というものに書かれています。

$title = 'BBS';
$color = '#555555';

のように

それを呼び出して変数をセットしていたのですが、use strictを
使った場合はmainパッケージを指定して

$main::title

のようにしないとだめなのでしょうか?
使うたびにいちいち$main::

と記述するのが面倒なのですが・・・


0414nobodyさん04/03/14 12:57ID:2Zg8YvJb
http://qb3.2ch.net/test/read.cgi/operate/1078972549/122
>122 :root ★ :04/03/13 21:30 ID:???
>こっちにも貼っておこう。
>916 名前:root ★[sage] 投稿日:04/03/13 21:28 ID:???
>・同時に動くread.cgi数を制限するディレクティブorモジュール
>・負荷(LA)を見てCGI起動を制限するディレクティブモジュール
>
>があったら、誰か教えてください。
http://qb3.2ch.net/test/read.cgi/operate/1078921755/829
http://qb3.2ch.net/test/read.cgi/operate/1078921755/831
http://qb3.2ch.net/test/read.cgi/operate/1078921755/916
0415nobodyさん04/03/14 13:29ID:???
>>413
mainパッケージなら、パッケージ名を省略できるぞ。

$::title
0416nobodyさん04/03/14 13:51ID:???
>>413
名前空間が同じなら、
use vars qw($title);
とか
0417nobodyさん04/03/14 13:56ID:???
>>413
自分ひとりで使うなら自由だろうけれども。
他人や素人にも可能なように、設定ファイル形式にするのはどうか。
0418die($/);04/03/14 14:24ID:ntUNbT3i
cpan ってなんて読めばいいのでしょうか?
気になって朝も起きれません
0419nobodyさん04/03/14 14:43ID:???
しー○ん
0420die($/)04/03/14 14:48ID:ntUNbT3i
しーぽんですか、ありがとうございました
0421nobodyさん04/03/14 17:11ID:???
(´ω`)・・・
0422nobodyさん04/03/14 18:06ID:???
まことに初歩的な質問かもしれませんがどうか教えて下さい。

既存のスクリプトを改造しているのですが、以下のようなことをしようと
思っています。

1)フォームより***.txtといったようなファイルを送信する
2)入力されたファイルを解析して結果を表示する

・・・というものです。

フォームにテキストそのものを書き込む方法ならその値を読み込む
方法なら簡単だと思うのですが・・・
フォーム入力から例えば***.txtというファイルを送信した場合に
これを一旦任意のディレクトリにアップロードして、スクリプト内で
ファイルをopenして処理する以外に方法はないのでしょうか?
042341304/03/14 19:33ID:MYhrucqa
レスありがとうございます。

use strict;

としたあとに、

my $val = 10;

print "Content-type: text/html\n\n";
print $val;

exit;

としたところ動きました。どうもありがとうございました。
0424nobodyさん04/03/14 19:42ID:???
>>422

>これを一旦任意のディレクトリにアップロードして、スクリプト内で
>ファイルをopenして処理する以外に方法はないのでしょうか?

どうもないらしい。少なくとも俺は知らん。
CGI.pmのドキュメントを読めばわかると思うが、
同じように一時ファイルに保存する分、それがセキュリティの穴になりうる可能性があるとのこと。
まあ、さっと保存してさっと処理してさっと消して、穴になる確率を極力減らす努力をしよう。


0425nobodyさん04/03/14 19:45ID:wZU93kf1
http://2.pro.tok2.com/~mg7/cm/benri.htm
0426nobodyさん04/03/14 20:01ID:???
>>422
ファイルのアップロードはCGI.pmやCGI::Liteを使えば簡単。
って話じゃないのかしらん。
042742204/03/14 20:14ID:???
>>424さん、>>426さん
ありがとうございます。
必死にぐぐってみているのですが、どうもそれらしい資料が見当たらない
のはそういう理由なのでしょうね。
>>424さんいアドバイスいただいたようにセキュリティの穴を作らないよう
素直にテンポラリファイルを作って対処したいと思います。
何分perlの勉強を始めたばかりでわからないことばかりですがひとつひとつ
問題を乗り越えていきたいと思います。
どうもありがとうございました。
042842204/03/14 20:21ID:???
>>426さん
考えていたのは送信したpostで受けたファイルをいちいち保存しないでそのまま
メモリ上に展開して解析、値を返す、、、ようなことを考えていました。
もっと精進します。
0429nobodyさん04/03/14 22:25ID:???
アップロードされたファイルは標準入力に入ってやってくるわけだから
multipart を自力でデコードすれば原理的に不可能な話じゃないだろう

CGI.pm の man に書いてあるのは、
「CGI.pm はテンポラリファイルを作るので盗聴の恐れもあるんだよ」ということで、
本来はテンポラリファイルを作らず自力でデコードする方がセキュリティは高い。

なんだが、自力でデコードするのがめんどいので、
たいていみんな「盗聴されてもいいやー、どーせuploaderだしぃ」とか妥協して
CGI.pm に頼ってしまうわけだ。

自力でデコードするなら、
ttp://www.hk.airnet.ne.jp/~ahero/cgi/cgiex11.html
あたりを参考にしてみては。
0430nobodyさん04/03/14 22:47ID:???
>>429
そのサイト見たけど、えらいテキトーなコードだな
0431nobodyさん04/03/15 00:31ID:???
ファイルなんだから「盗聴」じゃなく「盗視」というべきなんではw

それはともかく、アップローダーとかなら見られても問題ないが、
そうでないなら自力でデコードするべきということだな。
つーか何でCGI.pmが危険を承知でそんな設計になってるんだ?
0432nobodyさん04/03/15 00:45ID:???
>>431
CGI.pmはメモリーをガンガンに食うので、とりあえず気休めにメモリ効率のいい方法を使ってみた、とか。
0433nobodyさん04/03/15 01:07ID:???
432はちょっと431に対してまとはずれなことを言っているようです。
0434nobodyさん04/03/15 01:15ID:???
CGI.pmは使った事無いけど、テンポラリファイルを
外から不可視のディレクトリ内に作らせるようには出来ないのかい。
0435nobodyさん04/03/15 01:37ID:???
>>434
できるんだけど、その場合でも CGI プロセス自身からは見えないとまずいので、
そういうパーミッションのディレクトリにせざるを得ない。
で、suexec 使ってない apache だと、全ての CGI プロセスから丸見えってことだよね、
とかそういう話。

man CGI にも 「suexec にしる」 と書いてあるんだが、
mod_perl な人とかは suexec できないので辛いよな。
0436nobodyさん04/03/15 02:14ID:???
ファイルロックって何でいるんですか?
ファイルに書き込むときには使ったほうがいいんですかね?
いまいち必要かがわからないので誰か教えて…
0437nobodyさん04/03/15 02:32ID:L0Oup+5/
以下のようなDBから必要なレコードとってきてタブ区切りテキストをダウンロードしようとしています。

# SQLの発行
$sql = "select no, date, standard, exception, company, address, quality, class, url from $tblname where del = 0 order by no";
$result = $conn->exec($sql);
# 行数、フィールド数の取得
$rows = $result->ntuples;
$fields = $result->nfields;
# データファイルを作成
for($r = 0; $r < $rows; $r ++)
{
for($f = 0; $f < $fields; $f ++)
{
$v = $result->getvalue($r, $f);
$data .= qq|$v\t|;
}
chop($data);
$data .= qq|\n|;
}
print "Content-type:text/plain\n\n";
&jcode::convert(\$data, 'sjis');
print $data;

ここで、実際にIEでダウンロードすると、当たり前といえば当たり前ですが、ダウンロードファイル名がデフォルトでスクリプトのcgiファイル名となってしまいます。
一度、サーバーにファイル書き出しして開いて送ればいいのですけど、それをしないで好きなファイル名でダウンロードできるようにする方法ありますか?
perlというより、CGIですが。。
043842204/03/15 02:40ID:???
>>429
お礼が遅くなってスマソです。教えていただいたリンク先ですが。。。
当方にはまだまだ敷居が高そうですが、今後の参考にさせていただきます。

>>436
未熟者が語るようなことではありませんが、例えば1つのファイルに複数の
書き込みがあったとしたらどうなると思います?
何らかの制御をして順番を決めないと競合してファイルが壊れてしまうはずです。
そのためにロックして1つの書き込みを処理している間は他の書き込みをロック
して防ぐことでファイルの破損を防ぐ。。。ということだと解釈していますが。
諸先輩方、いかがでしょうか?
0439nobodyさん04/03/15 02:43ID:???
>>438
あってます<ファイルロック
0440nobodyさん04/03/15 02:55ID:???
>>438
ファイルロックは書き込み処理の寸前にするのでしょうか?
またflock($fp,LOCK_UN);といった感じでロックを開放する処理も書き込み後行った方がいいのでしょうか?
044142204/03/15 03:17ID:???
>>439
ありがとうございます。

>>440
ファイルをopenする前にロック、closeしてから開放しないと
ロックする意味がないと思われますが?
http://www.google.com/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E3%83%AD%E3%83%83%E3%82%AF+%E3%81%A8%E3%81%AF&sourceid=opera&num=0&ie=utf-8&oe=utf-8
で
http://216.239.53.104/search?q=cache:JjxLPe-vA5IJ:tohoho.wakusei.ne.jp/wwwcgi8.htm+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E3%83%AD%E3%83%83%E3%82%AF+%E3%81%A8%E3%81%AF&hl=ja&ie=UTF-8
のような感じでしょうか。
0442nobodyさん04/03/15 03:27ID:???
>>441
ありがとうございます。もっと勉強して出直してきます。
0443nobodyさん04/03/15 04:19ID:???
本来初心者スレかファイルロックスレの範疇だが……

>440-441
基本的には「ロック > 処理 > アンロック」、
例えば一つのファイルを更新する場合は「ロック > 読み > 書き > アンロック」
の順番が守られていれば、open() はロックの先でも後でも良い。
#ロックの方法論は別の話

現に、flock() は以下のようにして使う。

open(FILE, 'file.dat');
flock(FILE, 2); # ロックは open() の後
..
#読み書き等の処理
..
flock(FILE, 8); # アンロック
close FILE; #   そして close()

ロックスレは途中荒れてるが読んでみると良い。
0444nobodyさん04/03/15 04:23ID:???
あれ初心者スレとのマルチか……まあ良いや。
0445nobodyさん04/03/15 04:39ID:???
>>437
ブラウザ依存だけどこんな感じのを吐けばいい。IEなら動く
Content-Type: application/octed-stream
Content-disposition: attachment; filename=xxx
044642204/03/15 04:39ID:???
>>443
なるほど。勉強になります。
ロックスレもじっくり読ませていただき勉強します!
今日はいろいろ勉強になります。諸先輩方に感謝します。
0447nobodyさん04/03/15 09:46ID:???
掲示板を作る際に記事のキーとして現在時刻を用いようと思うのですが
同じ時間になってしまうことはあるのでしょうか。
$key = time(); こんな感じで。
0448nobodyさん04/03/15 09:56ID:???
キー値として時間を使うのは不適当だと思うがどうだろうか。
0449nobodyさん04/03/15 09:58ID:???
>>447

CGIを同時起動させて時間取得を千回ほどループさせてみてはどうだろうか。
0450nobodyさん04/03/15 11:59ID:???
CGI.pmを使ったアップローダーのサンプルなのですが、どうもうまく実行できません。
line 27のハッシュの使い方がまずいようなのですが、いまいちわからず何が悪いのかわかりません。
環境はWinXP + Active Perl 5.6 + An HTTPDです。
0451nobodyさん04/03/15 12:01ID:???
#!/usr/local/bin/perl

BEGIN {
use CGI::Carp qw(carpout fatalsToBrowser);

carpout(STDOUT);
}

# 画像ファイルのサイズ制限(KB)
$img_max = '100';

# 画像を保存するディレクトリー
$images = '画像を保存するディレクトリー';

use CGI;
$query = new CGI;
$filename = $query->param('File');

# ファイルを読み込む
while(read($filename, $buffer, 2048)) {
$file .= $buffer;
$file_size ++;
if($file_size > $img_max / 2) { &Error("ファイルサイズが大きすぎます"); }
}
0452nobodyさん04/03/15 12:02ID:???
# 拡張子を取り出す
$type = $query->uploadInfo($filename)->{'Content-Type'};
if ($type =~ /jpeg/i) { $ext = 'jpg' };
elsif ($type =~ /gif/i ) { $ext = 'gif' };
else { &Error("その形式の画像ファイルは保存できません"); }

$new_file = "test" . ".$ext";

# ファイルを指定ディレクトリにコピー
open(OUT, "> $images/$new_file");
binmode(OUT);
print(OUT $file);
close(OUT);
chmod(0666, "$images/$new_file");

# 完了メッセージの表示
print <<END_OF_HTML;
Content-type: text/html

<HTML>
<BODY>
ファイルのアップロードに成功しました。
</BODY>
</HTML>
END_OF_HTML

exit;
045345004/03/15 12:24ID:???
すみません。自己解決しました。
このソ−スではファイルの入力部分のhtmlが不足していました。
書き足したところ上手くできました。お騒がせしました
0454nobodyさん04/03/15 13:47ID:L0Oup+5/
>>445
おおお。うまくいました。ありがとうございます!
0455nobodyさん04/03/15 15:01ID:gPR3Vlyr
質問です。
@number=("1","3","7","16",,,);
のように、まったく規則性が無い数値が大量に入っている配列があるのですが、
この中から最大値および最小値を取り出す場合、何かいい方法は無いでしょうか?
0456nobodyさん04/03/15 15:06ID:???
>>455
並び替えすりゃいいんじゃないの?
0457T.K04/03/15 16:03ID:???
>>455

sortを使う。

-----------

sort @number; #@numuberを並び替える
$max = $number[0];
$min = $number[$#number];

0458nobodyさん04/03/15 16:20ID:???
>>455
> 質問です。
> @number=("1","3","7","16");
> のように、まったく規則性が無い数値が

クオートしてたら文字列だろ、
@number=("1","3","7","16");
print ((sort@number)[-1]);# 7、と表示する。
045945804/03/15 16:31ID:???
>>458
> >>455
> > 質問です。
> > @number=("1","3","7","16");
> > のように、まったく規則性が無い数値が

@number=("1","3","7","16");
print ((sort{$a <=> $b}@number)[-1]);# 16 と表示する

# 明示的に数値として比較する必要がある
0460nobodyさん04/03/15 16:32ID:???
数値としてソートすりゃいいじゃん

sort{$a <=> $b}(@number);
046145004/03/15 16:41ID:???
ちょっと必要があって>>451-452のCGI.pmを使用したファイルアップローダー
でPerlの実行ファイル***.cgiをアップロードしたのですが、アップロードした
ファイルがInternal Server Errorとなり動きません。
まったく同一なファイルをCGI.pmでアップロードしない場合は問題なく動作します。
そこでCGI.pmでアップロードしたファイルを開くと改行コードはCR+LF、文字コードも
Shift_JISで問題ありませんでしたが、改行が増えた状態になっています。
どうやらアスキーではなくバイナリでアップロードされているようだったので、
ググって調べてみたところHTMLファイルのエンコードタイプが
multipart/form-data ではバイナリデータしか送れないことがわかったので、
application/x-www-form-urlencoded と変えました。
これでアップロードすると改行が増えることなく元のファイルとまったく同一
にアップロードされているようです。
しかしそれでもアップロードしたファイルは起動できずエラーになります。
さらに調べてみたところ、

>フォーム中に <INPUT type="file"> を含む場合は "multipart/form-data" を使用して下さい。

ということが書かれてありました。
原因はどうやらエンコードに問題があるようなのですが、この矛盾した状態でどうやったらファイルを
アップロードが正しくできるのでしょうか?
046245004/03/15 16:43ID:???
>HTMLファイルのエンコードタイプが
multipart/form-data ではバイナリデータしか送れないことがわかったので、
application/x-www-form-urlencoded と変えました。

抜けていましたが、htmlファイルのフォームの記述のことです。
<FORM ACTION="./upload.cgi" ENCTYPE="application/x-www-form-urlencoded" METHOD="POST">
0463nobodyさん04/03/15 17:00ID:???
もうperlとは関係ない話じゃないかよ

アップローダースレ
http://pc2.2ch.net/test/read.cgi/php/1022299892/
046445804/03/15 17:03ID:???
>>462

LFなファイルをそんまま送ればいいじゃねえの?
俺なんかEUC-JP LFで作ってそんまま生で送ってるよ
asciiモードなんか使わない、めんどくさいし間違いの元
046545004/03/15 17:07ID:???
>>463
CGI.pmに関することだからと思ってこちらに書き込ませてもらいましたが、
仰るとおりですね。スレ違い失礼しました。

>>464
どうもありがとうございます。試してみます。
0466nobodyさん04/03/15 17:08ID:???
根本的に勘違いしてるしな
0467nobodyさん04/03/15 19:34ID:???
>>461
任意のスクリプトが実行可能なアップローダですか…。
他サイトがやばいから、公開しないでね。
0468nobodyさん04/03/15 20:00ID:???
>>455
use List::Util qw(max min);
...
my ($min, $max) = (min(@number), max(@number));
0469nobodyさん04/03/15 21:41ID:???
今いるページのURIをPerlで読み取り、1つのスクリプトでURIごとに違うメッセージをつけたいんですが、

$url = 'ココ';
if ($url =~ m|http://*******.***/****/***/|) { print "含まれています"; }
else { print "含まれていません"; }

で出来るかなと思ったんですが、「ココ」を『今いるページのURI』という指定にしたいんですが、
どういう指定をすればいいんですか?

ちなみに、ここを参考にしました。
 → http://www.kent-web.com/perl/chap7.html
0470nobodyさん04/03/15 22:11ID:???
>>469
意味がわかんねえよ。
「今いるページのURI」ってなんなんだよ。
CGIでやってるなら、それはCGIを設置してるURIに固定だろ。
それともローカルで実行させるスクリプトのことか?
IEと連動させて、IEのアドレスバーの内容を読み取りたいってことか?
0471nobodyさん04/03/15 22:16ID:???
$ENV{'REQUEST_URI'}のことと思われ。
0472nobodyさん04/03/15 22:25ID:???
>>471
……そうなの?

"http://$ENV{HTTP_HOST}$ENV{REQUEST_URI}"

で、確かにリクエストされたCGIのURIになるけど、けどしかし、それがどうしたんだろうか、と。
0473nobodyさん04/03/15 22:33ID:c+xa9RIL
アドレスが一行ずつ書かれたサブネットマスク付きのファイルに対して、(12.100.0.0/15とか)丸ごと置換したく
  
  s/[0-9]*.[0-9]*.[0-9]*.[0-9]\/[0-9]*/置換したい文字列  と書きました。しかし一部

134.置換した文字列 という風にアドレスが一部残ってしまいます。
色々正規表現を変えてみたのですが、うまくいかず困ってます。
というか、やはり上の書き方がわるいのでしょうか・・・?
047446904/03/15 22:38ID:???
$url = "http://$ENV{HTTP_HOST}$ENV{REQUEST_URI}";

if ($url =~ m|http://**********.net/|) {
print "含まれています";
} else {
print "含まれていません";
}

これで出来ました!
>>470さん>>471さん>>472さんありがとうございました!
0475nobodyさん04/03/15 22:39ID:???
>>473

$ip =~ s/\d+\.\d+\.\d+\.\d+\/?\d*/$replace/;
こうじゃねえの?

[0-9]とするよりは、\dを使った方が専用の仕組みを使っている分速い(らしい。ベンチとったことない)
*だと、直前の文字が0個でも引っかかる。ので、必ず数値があるのがわかっている場合は、+を使う。これなら1文字以上の意味になる。
.は「任意の文字」つまり「なんでもいいから一文字」の意味になるので、ドットの意味で使う時はエスケープ(\.)する。

つか、正規表現を勉強しなおすか、正規表現スレに行ってくれんか?

0476nobodyさん04/03/15 22:42ID:???
>>474を踏まえて上で。
>>471
あんた、すごい読解力だな。エスパーかと思った。
なんでわかった? どうやって理解した?
0477nobodyさん04/03/15 23:11ID:???
俺も何を言ってんだかさっぱりわかんなかったよ
>>471は医療とか教育関係者?
0478nobodyさん04/03/16 00:15ID:???
俺もなんとなくだがREQUEST_URIだとはおもたが

ええ、負け惜しみですよ
0479nobodyさん04/03/16 01:03ID:N9sS5GGB
ユーザーファイルが下記のようになっていて、
taro<>100<>aho
jiro<>150<>jinan
sabuchan<>40<>kitajima

それを
@usr_name, @usr_pts, @usr_memo
に格納してあります。
$usr_name[$i]さんの点数=$usr_pts[$i](備考:$usr_memo[$i])って感じ。

usr_ptsでソートしてファイルを書き換えたいのですが、
簡単にできる関数ってありませんか?
自分で作るしかない?
0480nobodyさん04/03/16 01:17ID:???
DBを使えば楽なんだがな
0481nobodyさん04/03/16 01:17ID:???
>>479
データの持ち方が変、だと思う。
そのデータなら、
while ( <FILEHANDLE> ) {
chomp;
@line = split /<>/;
push @user, { map { $_=>shift @line } qw( name pts memo ) };
}
こんな風に読み込んで、

$user[$i]->{name}さん。
$user[$i]->{pts}点
備考:$user[$i]->{memo}
とアクセスした方がよくね?
ま、人それぞれだが。

で、このデータの持ち方なら、sortでいける。
@new_user = sort { $a->{pts} <=> $b->{pts} } @user;
降順(点数の高い順)なら、
@new_user = sort { $b->{pts} <=> $a->{pts} } @user;

書き込む時は、
foreach $user ( @user ) {
print FILEHANDLE split /<>/, map { $user->{$_} } qw ( name pts memo );
print FILEHANDLE "\n";
}

現在のデータ形式にこだわりたいのならば、色々方法は思いつくけど、
面倒臭くてバグが入り込みやすいのでオススメできない。
048247904/03/16 01:21ID:???
>>481
丁寧にありがとうごじゃいます。
ご指導の通りその方法でやってみます!thx!
(´-`).。oO(コードの他のところに影響出るんだろうなぁ。。。
0483nobodyさん04/03/16 01:28ID:???
普通、デコード処理はforeachで行いますが、

$query =~ tr/&=/\0/;
$query =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;

%in = split(/\0/,$query);

じゃ駄目ですか?
0484nobodyさん04/03/16 01:37ID:???
>>483
あー。7行プログラミングスレで出てきたねー、それ。

その方法だと、
<input type="text" name="name">
<input type="text" name="name">
このように同じname属性を持つフォームが複数あった場合、
競合してどれか一つの値のみになってしまう。
それを覚悟の上ならば、別に問題はないと思う。

048548104/03/16 01:39ID:???
訂正。書き込む時。

foreach $user ( @user ) {
print FILEHANDLE join(/<>/, map { $user->{$_} } qw ( name pts memo ));
print FILEHANDLE "\n";
}

# split と join じゃ正反対だっての……_| ̄|○
048647904/03/16 02:01ID:???
      ○ ゲンキダセヨ
      ノ|)
 _| ̄|○ <し
0487nobodyさん04/03/16 02:14ID:???
>>484
ありがとうございます。
軽さはどうなんでしょうかね。。
0488nobodyさん04/03/16 09:11ID:???
質問です。
ログからデータを読み出すときに、
open(DATA,"<$log");
@line=<DATA>;
foreach$temp(@line){
  ($hoge,$bar,$foo)=split(/\t/,$temp);
  print"$hoge,$bar,$foo";
  以下処理
}
と書いているんですが、いちいちsplitの時に変数を決めずに
foreach$temp(@line){
  @data=split(/\t/,$temp);
  print"$data[0],$data[1],$data[2]";
  以下処理
}
のように配列に突っ込んでその中身を見るほうが速かったりしますか?
0489nobodyさん04/03/16 09:48ID:???
>>487
負荷が気になるのなら自分でベンチ取れ。

>>488
おまいもだ。
0490nobodyさん04/03/16 11:04ID:???
すいません、ベンチって何ですか?
Googleで
Perl ベンチ
とかで調べてみたのですけど、よくわかりません。
0491nobodyさん04/03/16 11:09ID:???
>>489
素直にわからねぇって頭下げろよpgr
0492nobodyさん04/03/16 11:32ID:???
>>488
普通に考えて
わざわざ配列にsplitで切って突っ込んで
また配列から切り読みするよりかは
変数決めた方が早いっしょ?

しかし、100万ループくらいさせて
微妙にベンチに差が出る程度かと
0493nobodyさん04/03/16 11:53ID:???
>>492
回答有難う御座います。
そこまで厳密にこだわる必要と言うのはなさそうですね。
0494nobodyさん04/03/16 11:55ID:bxdLayrh
サブルーチンに文字列の変数を渡すときは、以下のように渡すとわかるのですが、
my @aParamlist = &get_aParamlist($hoge);
sub get_aParamlist{
    my $strhtmlbody = shift;
(中略)
    return @aParamlist;
}
配列の変数@hogeを渡すときはどのようにすればいいのでしょうか?

my @aParamlist = &get_aParamlist(\@hoge);
のように参照渡しというのをやることはわかったのですが、
    my $strhtmlbody = shift;
に該当する、変数@hogeを受け取る部分の書き方がわかりません。
どなたか教えていただければ幸いです。
049549404/03/16 12:01ID:bxdLayrh
すいません。
my @$aParamlist = shift;

とやることはわかったのですが、
この配列の最後の要素はどうやって取得するのでしょうか?
(普通なら$#ARRAYとやるところ)
049645804/03/16 12:13ID:???
>>495
> すいません。
> my @$aParamlist = shift;
>
> とやることはわかったのですが、
> この配列の最後の要素はどうやって取得するのでしょうか?
> (普通なら$#ARRAYとやるところ)

普通に考えてやってみれ
049749404/03/16 12:19ID:bxdLayrh
すいません、自己解決しました・・・おさわがせしました
my $aParamlist = shift;
print $#$aParamlist;
0498nobodyさん04/03/16 12:23ID:???
>497
単に最後の要素を取得したいだけだったら
$$aParamlist[-1] でも良いような。
0499nobodyさん04/03/16 12:29ID:???
どっちが早いか、って聞いてくるやつに限って素人

もうそういう質問はスルーでいんじゃね?
0500nobodyさん04/03/16 13:07ID:???
素人が集まるスレだから当たり前なわけだが。
0501nobodyさん04/03/16 13:57ID:cS+tmipm
$Addr_spec_re = qr<$local_part\@$domain>;

あるモジュールをインストールして上記の行でエラーが出ます。
perlのバージョンが古い為にqr<>記法に対応していない為と思われますが、
どんな書き方に改めれば大丈夫ですか?
またそれに伴って$Addr_spec_reを使ってる正規表現の箇所にも変更必要なら
教えていただけませんか?

いろいろ調べたのですがよくわかりませんでした。
050250104/03/16 14:11ID:???
>>501
普通に
$Addr_spec_re = qq<$local_part\@$domain>;
ってクオートしちゃいました。
コンパイル済みにならない、ってだけですよね。
0503nobodyさん04/03/16 14:36ID:DnhEtv1I
    / ̄ ̄ ̄ ̄\ 
   (  人____)
    |ミ/  ー◎-◎-)
   (6     (_ _) )
  _|/ ∴ ノ  3 ノ 
 (__/\_____ノ_←クソスレ立てた>>1
 / (__))     ))| |
[]__ | | 鋼錬命ヽ | |
|]  | |______)_)
 \_.(__)三三三[国])
  /(_)\::::::::::::::::::::|
 |Sofmap..|:::::::::/:::::/ 
  |____|;;;;;;/;;;;;/.
     (___|)__|)
0504nobodyさん04/03/16 14:37ID:DnhEtv1I
   /::::::::::::::::::::::::::\〜プーン
  /::::::::スーパーアニオタ\〜プーン
  |::::::::::::::::::|  持た猿|〜プーン ←>>1
  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ〜     
  |::( 6∪ ー─◎─◎ )〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |ノ  (∵∴ ( o o)∴)〜      < PERLPERL!!
  | ∪< ∵∵   3 ∵> ムッキー!     \___________
  \        ⌒ ノ_____   
    \_____/ |  | ̄ ̄\ \
___/      \   |  |    | ̄ ̄|  
|:::::::/  \___ | \|  |    |__|
|:::::::| \____|つ⊂|__|__/ /   
|:::::/        | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕   
       カタカタカタカタ


0505nobodyさん04/03/16 14:37ID:DnhEtv1I
                 僕らはいつでも叫んでる〜♪
                      _,..--―‐--.、
                     / ,;ヘ     ヽ
                     i i !       i
                  +  i ヽ()    !   i
                    i _, 、<_   `  y、
                 +  〈.´=.! ` `=´    6.)
                    .! '''.|_,! ''' 〈  |'´!  救出成功
                __,..-‐!(_,-―-、__,) ' ,!  i.
             _,.r'´ ̄  ヽ、. !`ー'Tー'  _,r'´   i、._
         _,..r'´,,....  _   ヽ `ヽ、_,..-‐´       `ヽ、
        ,'´    _,r'´   ⌒ヽ< /_∠、_   〃′ __  `ヽ、
        i    ,r'´ `      `/    ⌒ ⌒ヽ' ̄  `ヽ   `)、
         !_  ⌒/        ,r'´ ̄    _ ,  ;;,,,        ヽ.
       ,r'   ,′      /         ヽ、           i
      /    ∧       ,′          ′             !
     ,i  ∧/ ゚w゚; Vヽ   i            ,,、,),、  ,、_   ,.    !
     !/     ト、_,.-‐´  `、         〃/ノ''ヘヾ  Y'´    Y
    ,イ  ⌒ヽ、 ,!、       ` ‐ 、.   ゞ∽(|iソ;゚Д゚)リ         `i
   _ノ、      Y、i、 _,..-―-.、_   ` ヽ 、_,.-l,i .l          !
  ./ .!、 `ト、_   \!'      `ヽ、_ ,;     イ il ,    i   __、 )
 〈   ヽ `ヽ、_.    `ヽ、        、   、_人 Y    〉  '  V
  `、       ヽ、    ヽ、>ー--  !^     ,l、|_,    !    !
    `;、       `      \__,..--..、  ヽ ',r'´    〈.     !

パンチ5分の2
0506nobodyさん04/03/16 14:38ID:DnhEtv1I
                   ) )
             /(   / (     /i    / ̄ ̄ ̄ ̄ ̄
            ( ヽ、 {  ∧__∧ ( (   < キック2分の1に勝てるとでも?
           )ヽ`ー、 \ ( ´_ゝ`) ノ  )   \_____
           ( \ ) ) /  <__イ //⌒,フ
        /⌒`ヽ、`(  ( ⌒ヽヘ、フへ' /~  ,、
       i/⌒\ ヽ ヽ \ヘしヘ_ノ ノ/ ⌒`ー' )
            ヽ  `〜⌒> ゝ--イ⌒ /⌒`ー'~
           八   `フ⌒ヘ/   |へイ
         ( `ー'~  ,へ{  _ノ |ヘ、 ヽ _ノ )
          `ー―'' ~  |  / /  ヽ_ノ
                     | / /
                  (  ) )
                  | | イ
                  | |. |
                 / |ヘ\
                 ∠/  ̄

0507nobodyさん04/03/16 14:39ID:DnhEtv1I
        , --- 、_
       /ミミミヾヾヽ、_
    ∠ヾヾヾヾヾヾjj┴彡ニヽ
   / , -ー‐'"´´´    ヾ.三ヽ
   ,' /            ヾ三ヽ
   j |     スミス      / }ミ i
   | |              / /ミ  !
   } | r、          l ゙iミ __」 何か不愉快か?アソダーンソ君
   |]ムヽ、_    __∠二、__,ィ|/ ィ }
   | ◎  ̄`ミl==r'´  ◎ / |lぅ lj
   「!ヽ、_____j ヽ、_  -'  レ'r'/
    `!     j  ヽ        j_ノ
    ',    ヽU_ U┘     ,i
     ヽ  ___'...__   i   ハ__
      ヽ ゙二二 `  ,' // 八
       ヽ        /'´   / ヽ
       |ヽ、__, '´ /   /   \

0508nobodyさん04/03/16 14:40ID:DnhEtv1I
                  ∩
                 ( ⌒)    ∩_ _      /
         \        /,. ノ     i .,,E)  /
          \     / @@@  / /" /
            \  / / _、_ @ / ノ' /
  \\   あんたら\ (.  ノ` )/   /.|@@@
   \\\  @@@ \.∧∧∧∧/   |#_、_ @ 
    (⌒\@# _、_@  <    母  >  |  ノ` ) PERLばっか
     \ ヽヽ(  ノ`)   <   者  >   |. ^    やってないで
      (mJ  ^ ⌒\ <    の  > と )   
 ─────────< 予    >───────────
   @@@         < 感    >       @@@ OK。,;⌒⌒i.
 @#_、_ @        < !!!    >     @#_、_ @⌒ヽ(   ;;;;;)
  (  ノ`)         /∨∨∨∨\     (  ノ`)  と)
 /|| ^ ||\.      / @@@    \  /⌒ ^ |   |.| |/ |;,ノ
  〈|゚ ̄ ゚̄|  トントン./ @  _、_ @.    \ イ    (    )| / .,i
  ヽii__リ /     /     (  ノ` ) 私の   \   / V ̄V | | ,,i;
   ._ヽ||)とノ ̄/    / ^   \    時代が \  \,,,丶,  | |,,,;
    .ililili二l/     /    / ̄ ̄ ̄ ̄/       .\  \   ,,   
           __(__ニつ/  FMV  /__
               \/____/

0509nobodyさん04/03/16 14:41ID:DnhEtv1I
                     /__;;;;;;;;;;;;;;;;;;;;;` '''- 、
                  ,,.=''";;;//ミ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
                 /;;;;;;;/彡'⌒ヽ!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'、
                 ,';;;;;;;//〃   l;;;;l'、;;;;;;;;;;;;;;;;;;;;;;;;;;;',
                 ,';;;;;;;;|/〃    '、;! '、;;;ヾ;;;;;;;;;;;;;;;;;;;',
                ,';;;;;;;;;;l〃-=、,,   ヾ、ヾ、ヾ;;;;;;;;;;;;;;;;;!
               /;;;;;;;;;;;;;;ヽ斗≡ミト''゛  ゞ≦气ミ 〉;;;;;;;;;;;!
               {;;;;;;;;;;;;;;;;;;;', ゞ;;;;'゙ `  |!  ';;;;シ/;;;;;;;;;;;;;;} 俺が今日からお前達をコーチすることになった宗方仁だ!
               ヾ;;;;;;;;;;;;;;;;;;',        ||    !;;;;;;;;;;;;;;ノ >>3、立て!コートで休むな!
                 !;;;;;;;;;;;;;;;リ       _!!    !/;;;;;;;;;/ >>4、膝のタメが甘ァいッ!
                !;;;;;;;l;;;;;;/     /::i     /;;;;;;;ノ >>5、腰が引けてる!
                ';;;;;;;|;;;;;/    ,. -ニ-、   f;;;;;;;/ >>6、部外者は口を出すな!
                 >;;;l;;;;∧   `ー ‐‐'    !;;;;;/ >>7-1000、ダッシュ100回! 5セット!
                ,ノ:.:`ル'   >--、  ̄   /;;;ノ
        _____,,,. -‐''":.:.:.:.:.:.ヽ /r/7/ \  ,, イ/;/!
      //:.:.:.:.>、ヽ ヽ:.:.:.:.::/_/77/ } /`´  /シ:.:.:.:.ヽ、
     /l /:.:./:./:.ヽ:.ヽ  >' _/777/  ./    /|´!:.:.:.:.:.:.:.ヽ、
   /:.:.:l l/:./:.:.:.:.:.:.:';.:.:>' _/7777/ } /   / ヽ|:.:.:.:.:./,.-`l
    |:.:./l l/:.:.:.:ヽ、:.:.:./ _/7777/  ./     ,'  !:.:.:.:/ /!  ト、
   !:/://:.:.:.:.:.:.:.:.:.:.>' _/777777/ } ∧    !  !l:.:./ /、|  |:.::',
0510nobodyさん04/03/16 14:42ID:DnhEtv1I

     ___
    /     \     ________
   /   ∧ ∧ \  /
  |     ・ ・   | < さぁてパソコンしか脳のないPERLでも作るか
  |     )●(  |  \________
  \     ー   ノ
    \____/
   /      \
  |        \ ____
   | \ \     //      //
  |  \ \   //      //
  |   \ \ //      //
  |     \ ○―――――)
  | | ̄ ̄ ̄ ̄匚 ̄ ̄ ̄ ̄ ̄|
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄



0511nobodyさん04/03/16 14:43ID:DnhEtv1I

          /       ヾ''"         ~`ヽ
         /       _,,,...  ヽ;:  /""ヽ     ヽ
        /         ;'"  "\ l /;:;;:::-'''ヽ,   i
       /         /::::::::-'''''"~        ヽ,   .|
      /        /;:;;:::'''           ヽ  ヽ
      |         |                ヽ  |  
      /        ;/      、        ,/ ヽ  i,   
     /        ;:;:ヽ      \,      /   ヽ  i, 
     i          / )(     \, 、  ,/ ,   ヽ ヽ 
     |          |  ⌒ ,,___\l,::,l/___|  |  
     |          |.    ー-ゞ'-'">><ー-ゞ'-'"'|  |  
     |         ;:|        '""^     、   |  |  
      |         ヽ.        ゝ( ,-、 ,:‐、)  |  | 
      |       /ヾ..       /       ヽ  |  | 
      |          |       ./ゝ二ニニニニ二、  |  |  
..       |        `、ヽ     へ"\┼┼┼ノ/  /  |   
        |         ヽ\     `\ ̄ ̄ ̄ノ  /  |  
        |          l  `ー-::、_  " ̄ ̄" ,,..'|ヽ./    
        ヽ.        :人     /`ー――'''''  /    
        /;:;:;:;;:;:;: _/         
                わ し の パンチ5分の2をくらっておい で
 
                      何 さ ら し と ん じ ゃ キ サ マ ラ

0512nobodyさん04/03/16 14:46ID:???
うぉ、久々だな
■ このスレッドは過去ログ倉庫に格納されています