Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0438nobodyさん
04/10/31 14:32:57ID:???いくつかのやり方に応じて適切な条件が揃わないとできんよ。
つーか、逆に言うとそれをやられないように作られてるんだから。
0439nobodyさん
04/10/31 16:29:29ID:???しかし初心者だけにセキュリティ的な部分が非常に気になります・・・。
何かセキュリティ的に大丈夫かどうかチェックする方法ないですかね?
2chでさらす以外で。
他の初心者さんたちはどうしてるんだろ?
0440nobodyさん
04/10/31 16:37:53ID:???じゃなきゃ自分が上級者になる。
0441nobodyさん
04/10/31 22:09:05ID:???只でやりたかったら、どっかで晒すか知り合いに頼むしかないだろ。
金かける気があるならhttp://www.softek.co.jp/Sec/WebProbe/のようなツール使う。
0443nobodyさん
04/10/31 23:47:52ID:???XSSは当然として、セッションハイジャックやSQLインジェクションなど
その他色々。
0445nobodyさん
04/11/01 01:09:12ID:CTnWn+hAうるせーー!!!!!
0446nobodyさん
04/11/01 04:25:18ID:rUgrlUVh月がOctのように英語表記になってしまいます。
これはどのように数字に変更すればいいのでしょうか?
0447nobodyさん
04/11/01 10:51:27ID:???%Month = (Jan=>1, Feb=>2...)みたいなハッシュを用意しといてひけば
とりあえず数字にはなる。
0448nobodyさん
04/11/01 13:02:20ID:???みたいに12行書く。
0449nobodyさん
04/11/01 13:03:07ID:???0450nobodyさん
04/11/01 19:42:22ID:IPrYAMkf100単位でのキリ番は、
$a = substr("カウント値",-2,2);
if($a eq '00'){ print "キリ番"; }
で処理しています。
連番に関してはなかなかいいアイディアが思い浮かびません。
参考となるカウンターやアイディアをご教授ください。
0451nobodyさん
04/11/01 19:52:51ID:???0454nobodyさん
04/11/01 21:05:16ID:IPrYAMkf確かにダサイのですが要望があったので色々と試してました。
0の連続するきっちりのキリ番やゾロ目なら数十桁くらいを配列にいれて
比較してたのですが、連番となると数が多すぎて…
0455nobodyさん
04/11/01 21:17:07ID:???キリ番やゾロ目なら正規表現使う方が賢明だろう
連番はアイデアがないが
「自分が数字を見たとき連番かどうかをどうやって判断しているのだろう?」と
自分の頭の中の認知回路を自己分析してみると
実装可能なアルゴリズムを思いつけるかもしれん
0456nobodyさん
04/11/01 21:18:46ID:???sub zorome { my($x)=@_; $x % ('1' x length($x)) == 0; }
連番:
sub renban { my($x)=@_; zorome($x - substr('123456789', 0, length($x)-1));}
あたりでどう?
0457nobodyさん
04/11/01 21:25:11ID:hZSImnu8while(($var =~ /(\d)/) and ($var =~ s/$1{3}//)){print "連番やん\n";}
0458450
04/11/01 21:49:58ID:IPrYAMkf>>456、>>457様、ありがとうございます。
教えて頂いたものは負荷も少なく凄いです。
正規表現に疎いためまだ理解できていないのですが…
連番は何個からとかは特に決めていません。
12でも連番のキリ番として扱う予定です。
>>457様
$varに数値をいれるとして、$1の部分が理解できません。
これだと例えば1114も連番となってしまいますか?
0459nobodyさん
04/11/01 22:11:56ID:???0460nobodyさん
04/11/01 22:35:50ID:???$x =~ /^(\d)\1*$/
なのでこっちの方がシンプルかも? (最初が数字でその後0個以上の
同じ数字が文字列の最後まで続く)
最低n桁にしたければ*のところを{n-1,}にすればいい。たとえば
最低4桁なら
$x =~ /^(\d)\1{3,}$/
0461nobodyさん
04/11/01 22:38:27ID:???index("123456789", $x) >= 0
という手もある
0462nobodyさん
04/11/01 23:26:45ID:???入力チェックが効果的ってどっかで見た気がするが。
0463450
04/11/01 23:27:32ID:IPrYAMkf>>460、>>461様ありがとうございます。
正規表現でのゾロ目チェックは参考になりました。
連番でindexを使うのは気付きませんでした。
マルチだし、ハイジャックて・・・
0466nobodyさん
04/11/02 00:52:58ID:???セッション管理を必要としない仕様にする。
SQLを必要としない仕様にする。
そもそもセッション管理やSQLを使用しているのか疑問なのだが。
使用しているのならどこが穴になるのか想像できるはず。
ttp://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html
ttp://www.atmarkit.co.jp/fsecurity/rensai/webhole01/webhole01.html
0467nobodyさん
04/11/02 08:25:16ID:s3D5jAc8サイズはあっているのですが画像の上の10%くらいで変換がおわってあとは真っ黒になります
なにが原因なのでしょうか
use Image::Magick;
$i = Image::Magick->new;
$i->Read('test.jpg');
$i->[x]->Scale("200");
$i->Write("temp.jpg");
0468nobodyさん
04/11/02 09:46:11ID:???0469462
04/11/02 10:19:20ID:???0471467
04/11/02 10:55:21ID:MX3i4yL1$i = Image::Magick->new;
$i->Read('test.jpg');
$i->Resize(width=>200, height=>150, blur=>0.7);
$i->Write("temp.jpg");
これも駄目でした
0472nobodyさん
04/11/02 11:55:28ID:???なんか出てるかもよ。
ttp://www.imagemagick.org/www/perl.html#erro
0473nobodyさん
04/11/02 14:27:15ID:???使う事は出来ないんでしょうか?
foreach(@list){
if(/$pattern/$a){
print "true";
}else{
print "false";
}
}
正規表現を勉強しようと、
CGIで正規表現と複数の文字列をPOSTし、
文字列がマッチするか検証するスクリプトを書いています。
0476nobodyさん
04/11/02 18:01:53ID:???$a=4 if $b;
$b=5 if $b;
と
if($b){
$a=4;
$b=5;
}
なんか{}(ブロック)をなくす方が処理が早いみたいなこと聞いて
こんなつまらないことで悩んでる状況。
0477nobodyさん
04/11/02 18:19:17ID:???その月が何日が最終日なのかを調べるほうほうは
どのようにつくればいいのでしょうか?
0478nobodyさん
04/11/02 18:22:06ID:???0479nobodyさん
04/11/02 18:41:26ID:???それがものすごい回数繰り返されるループの中とかなら、
ベンチとって選べ。
そうでなければどうせ誤差ぐらいしか違わないから自分が
見やすいと思うほうにしとけ。
一般論としては、動くの作って動作速度に不満が出てから
プロファイラでどこが時間食ってるか調べて集中的に直せ、
と言われているようだ。
軽くベンチした感じでは、$bがfalseならif(){}の方が
3倍ぐらい早いが、$bがtrueなら25%ぐらい遅い。
0480nobodyさん
04/11/02 18:52:04ID:???my($y,$m) = (shift,shift);
my @days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
return 0 unless (1 <= $m and $m <= 12 );
$m-- == 2
? $days[$m] + ($y % 4 == 0) - ($y % 100 == 0) + ($y % 400 == 0)
: $days[$m];
}
0482nobodyさん
04/11/02 21:02:59ID:???も、べんちまぁくしてねぇ(はぁと)
0483nobodyさん
04/11/02 21:03:44ID:???それだと条件分岐の評価が2回行なわれるので、
条件式次第では遅くなる可能性があるよ。
$a=4, $b=5 if $b;
$b and $a=4, $b=5;
($a,$b)=(4,5) if $b;
$b &&= 5 and $a = 4;
労力の割にはたいした効果が期待できないので、
最適化のためにblockを消したりとかは、した事ないけど。
0484nobodyさん
04/11/02 22:26:47ID:???04110222
をGMTで同じように8桁で表したいのですが、どの様にするのが
よいのでしょうか?
一旦、unix timeにして、-9時間して、戻すのが順当でしょうか?
できれば、use Time::Localはしたくありません。
(それが使えない環境などがありそうなため)
perl JST GMT でググってもTZとかしかでてきませんでした。
よろしくお願いします。
0485nobodyさん
04/11/02 22:27:49ID:???だれかおしえてくらさい
↓ここの部分
http://pc5.2ch.net/test/read.cgi/php/1097158988/l100
0486nobodyさん
04/11/02 22:31:43ID:???0487nobodyさん
04/11/02 22:49:38ID:???0488nobodyさん
04/11/03 00:48:07ID:???動作をしたいんですが、これはどうすればいいでしょうか?
index と substr を使う方法を思いついたのですが、
もっとスマートな関数とかありますでしょうか?
0489nobodyさん
04/11/03 00:52:38ID:???0492nobodyさん
04/11/03 07:37:05ID:???特にSWFのサイズ取得とかあるサブルーチンあったら教えてくださいませ
0493nobodyさん
04/11/03 07:42:15ID:???あとは自分で何とかしる。
$_ = '04110222';
my @a = /(..)/g;
my @m = qw/31 28 31 30 31 30 31 31 30 31 30/;
$m[1]++ unless $a[0] % 4;
my $t = 946652400 + 3600 * ($a[3] + 24 * int $a[2] - 1 + 365 * $a[0] + (3 + $a[0]) / 4);
$t += 86400 * $m[$_] for 0..$a[1] - 2;
print scalar localtime $t;
0494nobodyさん
04/11/03 12:14:21ID:???この辺だったか。
http://search.cpan.org/~ysas/SWF-File-0.37/lib/SWF/File.pm
0495nobodyさん
04/11/03 13:27:44ID:???Time::Localってperl本体に付属してたと思ってたんだけど、
分離されたんだっけ?
あとGMTにするのはgmtime使うかtimezoneいじるべきで
unix timeを9時間戻すのはよろしくないと思うよ。
0496nobodyさん
04/11/03 15:09:23ID:???0497nobodyさん
04/11/03 15:24:21ID:???> GMTにするのはgmtime使うかtimezoneいじるべきで
漏れもそう思うが、
> unix timeを9時間戻すのはよろしくないと思うよ。
これには何か理由があるのか?
0498484
04/11/03 15:46:43ID:???質問の仕方が悪かったかもです。
どうやらgoogle君に聞いてみると、Time::Localは標準ライブラリらしいです。
なのでどの環境いっても使えそうです。
重くなりそうという根拠のない理由から、できれば避けたいと書きました。
#標準ライブラリということを確定的できる情報元ってないんでしょうか…
何をしたいかというと、
0411031500という時間をcookieのexpire時間にしたいのですが、cookieではGMT
でJSTを指定できないらしいので変換をしなくてはならないのです。
>>493さんのコードちょっとむずかしすぎてまだ理解できてないです…
以下のURLのサブルーチンでunix timeにはできそうです。
http://www.ybi.co.jp/koike/qa3000/qa3165.htm
0499nobodyさん
04/11/03 15:56:35ID:???http://perl.infoware.ne.jp/documents.html
0500nobodyさん
04/11/03 16:07:16ID:???うるう秒が間に入るとずれるから。ちゃんとサポートされたシステム
での話しだけど。
クッキーのexpire時間ぐらいならそう厳密じゃなくていいから
構わんと思うけどね。
0501nobodyさん
04/11/03 16:41:00ID:???5.8.4の標準ライブラリなら
http://www.perldoc.com/perl5.8.4/lib.html
確実に知りたいのなら
perldoc perlmodlib
0503nobodyさん
04/11/03 16:55:54ID:???あんまりこだわる必要はないと思うけど?
それよりも、なぜにcookieのexpireで人間的日付を元にするのかが気になる。
単純に timeから30日間有効 とかにしてしまえば楽なのに。
0504nobodyさん
04/11/03 17:10:11ID:???情報ありがとう!
やはり1つの関数で勝手にファイル判別してくれるとかはないんですかね?
まぁ手動で見分けて条件分岐すればいいんでしょうけども・・・。
0505nobodyさん
04/11/03 17:12:48ID:???前に、そういうサブルーチンを見かけた気がするんですが検索しても見つかりませんでした。
よろしくお願いします。
0509nobodyさん
04/11/03 18:31:44ID:???なるほど、4年に一度狂う位なら問題なさそうなので、unix timeにして-9時間に
しようかと思います。
標準ライブラリは、導入されていなかったり、過去のバージョンであるかわからない
とのことなのでやっぱり使わないほうが無難な気がするので使わない方向でいきます。
>>503
なぜ、人間的日付かというと、その時間になったら掲示板に投稿できなくなるという
改造を自分でして、読みやすいから0411031700みたいな形で設定ファイルに保存
するという形をとったからです。
ここから間違いかもしれませんが…unix timeで保存した方が良かったのかもしれませんね。
#やっぱり見やすいからそうしました。
0511nobodyさん
04/11/03 19:27:43ID:???ここを探してみそ。
http://age.s22.xrea.com/talk2ch/
# 正しいID算出方法かどうかの保障はないけど。
>>504
見つけたら是非とも報告よろしくー。
0513nobodyさん
04/11/03 22:16:22ID:???トリップの作り方はわかったのですが、
↓ここのIDはどうやって作るんでしょうか?
356 :Now_loading...774KB :04/11/03 21:01:50 ID:j7+5/dK/
誰かよろしくお願いします。
0515nobodyさん
04/11/04 00:33:21ID:???0518nobodyさん
04/11/04 00:56:38ID:???$#xxは$[変えるとそれにつれて変わるので(要素数-1)として
使うのは危険だと習った。
$[ = 1;
@xx = (1,2);
print $#xx+1;
$[をいじったスクリプトなんて書いたことないけどね。
0519nobodyさん
04/11/04 01:03:20ID:???0520515
04/11/04 01:27:14ID:???0521515
04/11/04 03:06:36ID:???0522nobodyさん
04/11/04 03:30:18ID:???0524nobodyさん
04/11/04 11:55:35ID:3xCNLIZD処理させたいんですが、この場合環境変数とif文使えばいいんでしょうか?
0525524
04/11/04 11:56:51ID:???0526nobodyさん
04/11/04 12:48:50ID:???ブラウザに丸見えになりますよね?
で、一応暗号化はしたんですけど、例えばネットカフェに
データが残ってて、解析されたら終わりってことですよね・・・
う〜んどうすればいいものか。
他のスクリプトはどうやっているんでしょ?
0527nobodyさん
04/11/04 12:54:01ID:???<input type="text" name="url" value="">
</form>
上記のようにアクション先にその場で入力された
URLを指定することってできるでしょうか?
0530527
04/11/04 13:40:32ID:???0531527
04/11/04 13:41:16ID:???0532526
04/11/04 13:52:12ID:???0534nobodyさん
04/11/04 14:45:41ID:???0536nobodyさん
04/11/04 15:34:22ID:???「変数を」別のスクリプトに渡す
ということは、foo.cgi->Browser->bar.cgiの過程で
foo.cgiが出力した値をbar.cgiに渡したいということか?
■ このスレッドは過去ログ倉庫に格納されています