Perl コーディング初心者質問コーナー Part33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/03/01 02:46ID:1GeWO7LH【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0450nobodyさん
04/03/15 11:59ID:???line 27のハッシュの使い方がまずいようなのですが、いまいちわからず何が悪いのかわかりません。
環境はWinXP + Active Perl 5.6 + An HTTPDです。
0451nobodyさん
04/03/15 12:01ID:???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;
0453450
04/03/15 12:24ID:???このソ−スではファイルの入力部分のhtmlが不足していました。
書き足したところ上手くできました。お騒がせしました
0454nobodyさん
04/03/15 13:47ID:L0Oup+5/おおお。うまくいました。ありがとうございます!
0455nobodyさん
04/03/15 15:01ID:gPR3Vlyr@number=("1","3","7","16",,,);
のように、まったく規則性が無い数値が大量に入っている配列があるのですが、
この中から最大値および最小値を取り出す場合、何かいい方法は無いでしょうか?
0457T.K
04/03/15 16:03ID:???sortを使う。
-----------
sort @number; #@numuberを並び替える
$max = $number[0];
$min = $number[$#number];
0458nobodyさん
04/03/15 16:20ID:???> 質問です。
> @number=("1","3","7","16");
> のように、まったく規則性が無い数値が
クオートしてたら文字列だろ、
@number=("1","3","7","16");
print ((sort@number)[-1]);# 7、と表示する。
0459458
04/03/15 16:31ID:???> >>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);
0461450
04/03/15 16:41ID:???で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" を使用して下さい。
ということが書かれてありました。
原因はどうやらエンコードに問題があるようなのですが、この矛盾した状態でどうやったらファイルを
アップロードが正しくできるのでしょうか?
0462450
04/03/15 16:43ID:???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:???アップローダースレ
http://pc2.2ch.net/test/read.cgi/php/1022299892/
0464458
04/03/15 17:03ID:???LFなファイルをそんまま送ればいいじゃねえの?
俺なんかEUC-JP LFで作ってそんまま生で送ってるよ
asciiモードなんか使わない、めんどくさいし間違いの元
0465450
04/03/15 17:07ID:???CGI.pmに関することだからと思ってこちらに書き込ませてもらいましたが、
仰るとおりですね。スレ違い失礼しました。
>>464
どうもありがとうございます。試してみます。
0466nobodyさん
04/03/15 17:08ID:???0468nobodyさん
04/03/15 20:00ID:???use List::Util qw(max min);
...
my ($min, $max) = (min(@number), max(@number));
0469nobodyさん
04/03/15 21:41ID:???$url = 'ココ';
if ($url =~ m|http://*******.***/****/***/|) { print "含まれています"; }
else { print "含まれていません"; }
で出来るかなと思ったんですが、「ココ」を『今いるページのURI』という指定にしたいんですが、
どういう指定をすればいいんですか?
ちなみに、ここを参考にしました。
→ http://www.kent-web.com/perl/chap7.html
0470nobodyさん
04/03/15 22:11ID:???意味がわかんねえよ。
「今いるページのURI」ってなんなんだよ。
CGIでやってるなら、それはCGIを設置してるURIに固定だろ。
それともローカルで実行させるスクリプトのことか?
IEと連動させて、IEのアドレスバーの内容を読み取りたいってことか?
0471nobodyさん
04/03/15 22:16ID:???0472nobodyさん
04/03/15 22:25ID:???……そうなの?
"http://$ENV{HTTP_HOST}$ENV{REQUEST_URI}"
で、確かにリクエストされたCGIのURIになるけど、けどしかし、それがどうしたんだろうか、と。
0473nobodyさん
04/03/15 22:33ID:c+xa9RILs/[0-9]*.[0-9]*.[0-9]*.[0-9]\/[0-9]*/置換したい文字列 と書きました。しかし一部
134.置換した文字列 という風にアドレスが一部残ってしまいます。
色々正規表現を変えてみたのですが、うまくいかず困ってます。
というか、やはり上の書き方がわるいのでしょうか・・・?
0474469
04/03/15 22:38ID:???if ($url =~ m|http://**********.net/|) {
print "含まれています";
} else {
print "含まれていません";
}
これで出来ました!
>>470さん>>471さん>>472さんありがとうございました!
0475nobodyさん
04/03/15 22:39ID:???$ip =~ s/\d+\.\d+\.\d+\.\d+\/?\d*/$replace/;
こうじゃねえの?
[0-9]とするよりは、\dを使った方が専用の仕組みを使っている分速い(らしい。ベンチとったことない)
*だと、直前の文字が0個でも引っかかる。ので、必ず数値があるのがわかっている場合は、+を使う。これなら1文字以上の意味になる。
.は「任意の文字」つまり「なんでもいいから一文字」の意味になるので、ドットの意味で使う時はエスケープ(\.)する。
つか、正規表現を勉強しなおすか、正規表現スレに行ってくれんか?
0478nobodyさん
04/03/16 00:15ID:???ええ、負け惜しみですよ
0479nobodyさん
04/03/16 01:03ID:N9sS5GGBtaro<>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:???0481nobodyさん
04/03/16 01:17ID:???データの持ち方が変、だと思う。
そのデータなら、
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";
}
現在のデータ形式にこだわりたいのならば、色々方法は思いつくけど、
面倒臭くてバグが入り込みやすいのでオススメできない。
0482479
04/03/16 01:21ID:???丁寧にありがとうごじゃいます。
ご指導の通りその方法でやってみます!thx!
(´-`).。oO(コードの他のところに影響出るんだろうなぁ。。。
0483nobodyさん
04/03/16 01:28ID:???$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:???あー。7行プログラミングスレで出てきたねー、それ。
その方法だと、
<input type="text" name="name">
<input type="text" name="name">
このように同じname属性を持つフォームが複数あった場合、
競合してどれか一つの値のみになってしまう。
それを覚悟の上ならば、別に問題はないと思う。
0485481
04/03/16 01:39ID:???foreach $user ( @user ) {
print FILEHANDLE join(/<>/, map { $user->{$_} } qw ( name pts memo ));
print FILEHANDLE "\n";
}
# split と join じゃ正反対だっての……_| ̄|○
0486479
04/03/16 02:01ID:???ノ|)
_| ̄|○ <し
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]";
以下処理
}
のように配列に突っ込んでその中身を見るほうが速かったりしますか?
0490nobodyさん
04/03/16 11:04ID:???Googleで
Perl ベンチ
とかで調べてみたのですけど、よくわかりません。
0492nobodyさん
04/03/16 11:32ID:???普通に考えて
わざわざ配列にsplitで切って突っ込んで
また配列から切り読みするよりかは
変数決めた方が早いっしょ?
しかし、100万ループくらいさせて
微妙にベンチに差が出る程度かと
0494nobodyさん
04/03/16 11:55ID:bxdLayrhmy @aParamlist = &get_aParamlist($hoge);
sub get_aParamlist{
my $strhtmlbody = shift;
(中略)
return @aParamlist;
}
配列の変数@hogeを渡すときはどのようにすればいいのでしょうか?
my @aParamlist = &get_aParamlist(\@hoge);
のように参照渡しというのをやることはわかったのですが、
my $strhtmlbody = shift;
に該当する、変数@hogeを受け取る部分の書き方がわかりません。
どなたか教えていただければ幸いです。
0495494
04/03/16 12:01ID:bxdLayrhmy @$aParamlist = shift;
とやることはわかったのですが、
この配列の最後の要素はどうやって取得するのでしょうか?
(普通なら$#ARRAYとやるところ)
0496458
04/03/16 12:13ID:???> すいません。
> my @$aParamlist = shift;
>
> とやることはわかったのですが、
> この配列の最後の要素はどうやって取得するのでしょうか?
> (普通なら$#ARRAYとやるところ)
普通に考えてやってみれ
0497494
04/03/16 12:19ID:bxdLayrhmy $aParamlist = shift;
print $#$aParamlist;
0498nobodyさん
04/03/16 12:23ID:???単に最後の要素を取得したいだけだったら
$$aParamlist[-1] でも良いような。
0499nobodyさん
04/03/16 12:29ID:???もうそういう質問はスルーでいんじゃね?
0500nobodyさん
04/03/16 13:07ID:???0501nobodyさん
04/03/16 13:57ID:cS+tmipmあるモジュールをインストールして上記の行でエラーが出ます。
perlのバージョンが古い為にqr<>記法に対応していない為と思われますが、
どんな書き方に改めれば大丈夫ですか?
またそれに伴って$Addr_spec_reを使ってる正規表現の箇所にも変更必要なら
教えていただけませんか?
いろいろ調べたのですがよくわかりませんでした。
0502501
04/03/16 14:11ID:???普通に
$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:???0516nobodyさん
04/03/16 16:45ID:VuQW4BOKHP宣伝掲示板を設置しているのですが、
何度もしつこく投稿してくるサイトのURLを
拒否設定にして、「そのURLは投稿できませんよ」
と、表示させているのですがしつこく登録を試みてきます。
で、拒否表示ではなく、ロケーションなどを使って
空白のページに飛ばすか、500エラーを返すか
どっちが効果的か悩んでいるのですが、
皆さんはこういう場合、どうされますか?
0517487
04/03/16 17:24ID:???$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倍以上早かった。
日本語だったりするともっと差が出そうだ。
データの取り方はこんな感じでいいですか。
0521517
04/03/16 20:10ID:???データはたくさん取りましたが。
0523nobodyさん
04/03/16 22:15ID:???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:???http://perldoc.com/perl5.8.0/lib/AnyDBM_File.html
http://perldoc.jp/docs/modules/BerkeleyDB-0.20/BerkeleyDB.pod
個人的には、多機能で制限の少ない DB_File をよく使う。
レコードサイズが 1KB で充分で、どんなサーバで使うか
分からないような時は使える可能性が高い SDBM を選ぶ。
0525523
04/03/16 22:53ID:GOniTDMIレスありがとう。
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:???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:???@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:???書籍やインターネットでやり方を調べていく中で、次のような
注意事項が記載しているものを見つけました。
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:???こっちはあんたの質問がよく分からんよ…
物凄く簡単に言うと、リストから2つ取り出して$a、$bに代入されて { } 内を呼び出すというのを
何回も繰り返すのがsortの基本動作。
$a、$bってのはこの名前で決まってるから変更できない。
{ } 内では -1、0、1 のどれかを返しさえすればどんな式だっていい。
$a、$bを参照しなくてもかまわないけど、それじゃソートを使う意味がまったくない。
0532nobodyさん
04/03/17 10:20ID:???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/
0534199☆
04/03/17 11:00ID:???エラー、ファイルが開けませんって出ます。
助けてください
0535nobodyさん
04/03/17 11:13ID:???@list = (A,B,C,D,E,F);
ってのがあって
EとFだけ取り出して別の配列に入れたい
場合ってのはどうやってやればいいんでしょうか
0536nobodyさん
04/03/17 11:16ID:???http://www5a.biglobe.ne.jp/~n_rieko/perl/3.htm
0537nobodyさん
04/03/17 11:27ID:???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+/4foreach(@data) {
if($_ eq ("E" || "F")) {
push(@tmp,$_); next;
}
push(@new,$_);
}
print @tmp;
print @new;
0539501
04/03/17 11:39ID:???> てっいうスクリプトがあるんですが、
ホントか?あるのか?
@hash{"element1"}って何表わしてる?
ホント動いた?
> $i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?
$i < @{$hash{"element1"}}
0540nobodyさん
04/03/17 11:39ID:8yt30+/4foreach(@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:???亀レスでスマソ
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:???続き〜
一時ファイルが他の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:???> if(($_ eq "E") || ($_ eq "F"))
foreach $list(@list) {
if(grep{$list eq $_ }qw(E F)) {
push(@tmp,); next;
}
push(@new,$list);
}
比較対照を動的にできる
0546nobodyさん
04/03/17 11:48ID:???0547nobodyさん
04/03/17 12:00ID:???($values[0], $values[1], ・・・・ $values[8]) = split(/■/, $aiueo);
0548nobodyさん
04/03/17 12:05ID:???についてお聞きしていいでしょうか。
一方は自分の所有するレンタルサーバーで、すでに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が受け取り、表示する
という流れなのですが・・・・・・
■ このスレッドは過去ログ倉庫に格納されています