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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
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:???
うぉ、久々だな
0513nobodyさん04/03/16 15:35ID:???
小学生がこんなスレに来たんですか?
0514nobodyさん04/03/16 15:41ID:???
春厨の時期ですね〜
0515nobodyさん04/03/16 16:14ID:???
>>513-514は新参かしら。
0516nobodyさん04/03/16 16:45ID:VuQW4BOK
ご意見、御指導お願いします。

HP宣伝掲示板を設置しているのですが、
何度もしつこく投稿してくるサイトのURLを
拒否設定にして、「そのURLは投稿できませんよ」
と、表示させているのですがしつこく登録を試みてきます。
で、拒否表示ではなく、ロケーションなどを使って
空白のページに飛ばすか、500エラーを返すか
どっちが効果的か悩んでいるのですが、
皆さんはこういう場合、どうされますか?
051748704/03/16 17:24ID:???
for (0..500000){
$buf = "abc=def";
$buf =~ tr/&=/\0/;
%in = split(/\0/,$buf);
}

for (0..500000){
$buf = "abc=def";
foreach (split(/&/,$buf)) {
($n,$v)=split(/=/);
$in{$n} = $v;
}
}

foreachの方が1.2倍以上早かった。
日本語だったりするともっと差が出そうだ。

データの取り方はこんな感じでいいですか。
0518nobodyさん04/03/16 17:37ID:???
>>516

 こ こ は コ ー デ ィ ン グ の ス レ で す
0519nobodyさん04/03/16 19:05ID:???
>>516
403
0520nobodyさん04/03/16 19:13ID:???
>>517
それで本当に比較できてると思うか?
まあ、好きなように納得してもいいけど
052151704/03/16 20:10ID:???
・・・Benchmarkモジュールなるものがあるのか

データはたくさん取りましたが。
0522nobodyさん04/03/16 20:21ID:???
>>521
間違ったデータを集めたって意味ないだろ。
たったあれだけの短い>>517のコードのどこが無意味かさえわからない?
0523nobodyさん04/03/16 22:15ID:???
DBMファイルを扱おうかと思うんですが、
SDBM, GDBM など色々あって正直何を使えばいいのかわかりません…。
それぞれのメリットデメリットは何があるのでしょうか?

試しに、SDBM, GDBM を使ってみたところ、
SDBM は pag と dir ファイルが生成されて、ファイルサイズは 1024 バイト。
GDBM は、ファイル名を指定できて、ファイルサイズは何もデータが入っていなくても 12288 バイトのものができました。
GDBM についてはデータを増やすと、それに比例してファイルサイズも増えていくみたいです。(12288バイト以下には絶対ならない)

これって、ちょっとしたデータに使う場合は、GDBMだと毎回10Kくらいのファイルが作られちゃうってことなのでしょうか?
また、SDBMは、1KB以上のデータは扱えないのでしょうか?扱うとどうなるのでしょうか?

Perl のバージョンは5.6、OSはLinuxです。
0524nobodyさん04/03/16 22:41ID:???
>>523
http://perldoc.com/perl5.8.0/lib/AnyDBM_File.html
http://perldoc.jp/docs/modules/BerkeleyDB-0.20/BerkeleyDB.pod

個人的には、多機能で制限の少ない DB_File をよく使う。
レコードサイズが 1KB で充分で、どんなサーバで使うか
分からないような時は使える可能性が高い SDBM を選ぶ。
052552304/03/16 22:53ID:GOniTDMI
>>524
レスありがとう。

DB_File がなんとなくよさそうな気がしてきました。
(比較表が抽象的でいまいちわかりませんでした…)

それと、DBMファイルは全部ロック機能はサポートしているのでしょうか?
GDBM は自動で flock がかかると聞いたことがありますが。。。
0526nobodyさん04/03/17 04:19ID:???
欲しい情報を見つけることが出来なかったので、
ご存じの方がいましたら教えていただきたいのですが。

perlスクリプト中のperl呼び出し時に起動オプション[-w]を付けて書いています。
そうしても処理結果自体は欲しい結果が得られるのですが、
警告文として、以下のものが出力されます。

警告文
Use of uninitialized value in string eq at test.cgi line 10.
Use of uninitialized value in string eq at test.cgi line 52.

該当スクリプト記述
10 : if ($ENV{'REQUEST_METHOD'} eq "POST") {
52 : if ($form{'key'} eq '')

http://www.att.or.jp/perl/man/perldiag.1.html
ここの情報で未定義値を初期化しないで使用しているという
原因までは解ったのですが、if文のeqに対してどう初期化を
行えば良いのか、解決策を探すことができませんでした。

この問題の解決方法をどなかたご教授下さい。
0527nobodyさん04/03/17 06:34ID:???
>>526
if (defined $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} eq 'POST'){
0528nobodyさん04/03/17 08:37ID:???
ちょっと質問です。
perlのソートを使おうとしているんですが、微妙に意味が分からない事になりました。

sort {$a <=> $b} @aaa;

数字を並べる時、この書きかたが一般的だと思うのですが、
$aと$bってなんでしょう。
「イツのまに、なにが代入されたのでしょうか?」←これが質問1。

で、実際のソートは、返ってくる数字「-1」「0」「1」の三種類によってsortが返すリストの順番だと思ったのですが、
「それは正解ですか?」←質問2

もし、正解ならば「-1」「0」「1」の三種類が発生する形式ならば可能ですか?
それとも、必ず「$a」「$b」を使うような形式にする必要がありますか?←質問3

詰まる所、$aと$bの中身がよく分からないので、sort自体がよく分からない物になってしまってます。
m(__)m
0529nobodyさん04/03/17 08:49ID:???
$aiueo = "1■2■■■3■4■5■■■";
@values = split(/■/, $aiueo);
$i = 0;
foreach $value (@values){
 if($value eq ""){
  @values[$i] = "NULL";
 }
 print "$i : @values[$i]\n";
 $i++;
}
これを実行すると、
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
こう表示されます。
しかし、最後の5以降はsplitでは無視されてしまうようです。
自分としては
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
6 : NULL
7 : NULL
8 : NULL
としたいのですが可能でしょうか。
0530nobodyさん04/03/17 09:29ID:???
PerlのDBIを使って、MySQLを操作しようとしています。
書籍やインターネットでやり方を調べていく中で、次のような
注意事項が記載しているものを見つけました。

1:$dbh = DBI->connect(****);
2:$sth = $dbh->prepare(*****);
3:$sth->execute();
4:$sth->finish();
5:$sth = $dbh->prepare(*****);
6:$sth->execute();
7:$sth->finish();
8:$dbh->disconnect();
の様に一回のDBコネクション中で2回のコマンド発行を
するときは、一回目(上記2〜4)と二回目(上記5〜7)で
ハンドル変数名を変えなければならない(例えば5〜7は
$sthではなく、$sth2にする)というものです。

自分の環境下の簡単なプログラム中では問題なく
動いているのですが、本当に注意すべき内容なのでしょうか?
0531nobodyさん04/03/17 10:03ID:???
>>528
こっちはあんたの質問がよく分からんよ…

物凄く簡単に言うと、リストから2つ取り出して$a、$bに代入されて { } 内を呼び出すというのを
何回も繰り返すのがsortの基本動作。
$a、$bってのはこの名前で決まってるから変更できない。
{ } 内では -1、0、1 のどれかを返しさえすればどんな式だっていい。
$a、$bを参照しなくてもかまわないけど、それじゃソートを使う意味がまったくない。
0532nobodyさん04/03/17 10:20ID:???
>>528
http://perldoc.com/perl5.8.0/pod/func/sort.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST

>>529
http://perldoc.com/perl5.8.0/pod/func/split.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_split__PATTERN__EXPR_LIMIT

>>530
http://pc2.2ch.net/test/read.cgi/php/1015943725/
0533nobodyさん04/03/17 10:31ID:???
>>530
そんなの注意すべき点でもなんでもない。
その糞情報のソースを晒せ。
0534199☆04/03/17 11:00ID:???
The Wars of Roses を設置してるんですが、キャラ作成後
エラー、ファイルが開けませんって出ます。
助けてください
0535nobodyさん04/03/17 11:13ID:???
すいません、リストの取り出しについてなんですが
@list = (A,B,C,D,E,F);
ってのがあって
EとFだけ取り出して別の配列に入れたい
場合ってのはどうやってやればいいんでしょうか
0536nobodyさん04/03/17 11:16ID:???
>535
http://www5a.biglobe.ne.jp/~n_rieko/perl/3.htm
0537nobodyさん04/03/17 11:27ID:???
%hash = (
    element1 => [ 1, 2 ,3, 4, 5],
    element2 => [ 3, 4 ],
    element3 => [ 5, 6 ],
);

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

for ($i=0; $i<= (@hash{"element1"} -1) ;$i++){
    print $hash{"element1"}[$i] . "<br>";
}

てっいうスクリプトがあるんですが、

$i<= (@hash{"element1"} -1)
の部分、リファレンスに関する知識が乏しいために、
苦し紛れに書いていて、見苦しいです。
もっとスマートに($#などを使って?)書くには
どうすればいいのでしょうか?

というか、こういう場合、普通、
$i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?
0538nobodyさん04/03/17 11:35ID:8yt30+/4
>>535

foreach(@data) {
if($_ eq ("E" || "F")) {
push(@tmp,$_); next;
}
push(@new,$_);
}

print @tmp;
print @new;
053950104/03/17 11:39ID:???
>>537
> てっいうスクリプトがあるんですが、

ホントか?あるのか?
@hash{"element1"}って何表わしてる?
ホント動いた?

> $i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?

$i < @{$hash{"element1"}}
0540nobodyさん04/03/17 11:39ID:8yt30+/4
訂正

foreach(@list) {
if(($_ eq "E") || ($_ eq "F")) {
push(@tmp,$_); next;
}
push(@new,$_);
}
0541nobodyさん04/03/17 11:41ID:8yt30+/4
ちょっと気になったんだけど

$_の値がEもしくはFだったら
というifの書き方だけど

if(($_ eq "E") || ($_ eq "F"))

以外にいい方法ない?
0542nobodyさん04/03/17 11:44ID:???
>>422>>424
亀レスでスマソ
http://216.239.53.104/search?q=cache:xeL-yvLnImUJ:member.nifty.ne.jp/hippo2000/perltips/Cgi.htm+cgi.pm+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%80%80%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA&hl=ja&ie=UTF-8

-private_tempfiles
CGI.pmはアップロードされたファイルを処理することができます。
通常、アップロードされたファイルはテンポラリ・ディレクトリに
スプールされ、処理が終ると削除されます。
しかし、これには「ファイル・アップロード」セクションでも説明
しているように盗聴の危険性があります。
それが秘密の情報であっても、アップロードの途中に他のCGIスクリプト
の作者が覗き見ることができます。
UNIXシステムでは、-private_tempfilesプラグマは、テンポラリ・ファイル
を開かれると、何かデータが書込まれる前に、すぐに削除されるようにします。
これにより盗聴の危険性を減らしますが、完全ではなりません。
(まだ潜在的に可能な状態です)アタッカーに厳しく対応するためには、
プログラムは一時ファイル名をやって来たHTTTPヘッダの32ビットチェックサム
を計算することで選択します。
0543nobodyさん04/03/17 11:45ID:???
>>422>>424
続き〜

一時ファイルが他のCGIスクリプトが読むことが出来ないことを保証するには、
スクリプトを実行するためにsuEXEC または CGI ラッパを使ってください。
一時ファイルはモード 0600(ワールドもグループも読むことが出来ない)で
作成されます。

一時ディレクトリは以下のアルゴリズムを使って選択されます:

1. 現在のユーザ(例えば"nobody")がホーム・ディレクトリに"tmp"と
いうディレクトリを持っていれば、それを使います(Unixシステムのみ)

2. 環境変数TMPDIRがあれば、示された場所を使います

3. そうでなければ、以下の場所を当たります /usr/tmp, /var/tmp, C:\temp,
/tmp, /temp, ::Temporary Items, and \WWW_ROOT.

それぞれの場所はそれがディレクトリであるか、書きこみ可能かをチェックされます。そうでなければアルゴリズムは次の選択を挑戦します。
0544nobodyさん04/03/17 11:46ID:???
>>541
> if(($_ eq "E") || ($_ eq "F"))
foreach $list(@list) {
if(grep{$list eq $_ }qw(E F)) {
push(@tmp,); next;
}
push(@new,$list);
}

比較対照を動的にできる
054554404/03/17 11:47ID:???
>>544
push(@tmp,$list); next;

ね
0546nobodyさん04/03/17 11:48ID:???
なるほど。THX。
0547nobodyさん04/03/17 12:00ID:???
>>529
($values[0], $values[1], ・・・・ $values[8]) = split(/■/, $aiueo);
0548nobodyさん04/03/17 12:05ID:???
「他のサーバーのCGIの出力結果を自分のサーバーのCGIで受け取る方法」
についてお聞きしていいでしょうか。

一方は自分の所有するレンタルサーバーで、すでにCGIを幾つか設置してあるのです。
もし、フリーのHP(ここではisweb)のCGIから自分のサーバーのCGIを呼び出す、
いわばスクリプトの流用ができれば作業も楽だし
iswebのサーバーにも余計な負担がかからなくて良いかなと思って試しています。

レンタル鯖のCGIは今は単にテキストデータを処理してprintで画面に出力するだけです。
具体的にはshowdat.cgiでlog.datの内容を整形して1行ずつ書き出しています。
この、動的に出力された整形済みのデータを他のHPから呼び出し、CGIで利用したいのです。
レンタル鯖のほうで整形済データをfixedlog.dat等に書き込んでからそれを外部から読むのではなく、

�@iswebのreaddat.cgiにアクセス
�Aiswebのreaddat.cgiの内部で、レンタル鯖のshowdat.cgiにアクセス
�Bレンタル鯖のshowdat.cgiが動作し、レンタル鯖のlog.datの内容を整形して返り値とする
�C返り値をiswebのreaddat.cgiが受け取り、表示する
という流れなのですが・・・・・・
■ このスレッドは過去ログ倉庫に格納されています