Perl コーディング初心者質問コーナー Part35
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/05/26 16:48ID:kkhhiYmo【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0415nobodyさん
04/06/20 16:36ID:???my @new = sort{ $a->{b} <=> $b->{b} } @array;
>>406
print (OUT @nakami);
このような配列があるときに、配列の一部に存在する
3, 7, 5の数字を使ってソートしたいです。
こう並べ替えたい↓
@list = (name<>pass<>7, name<>pass<>5, name<>pass<>3);
のですが、うまく処理する方法が思いつきません。
よろしくお願いします。
0419nobodyさん
04/06/20 22:34ID:???@list =(
"name3<>pass3<>3",
"name7<>pass7<>7",
"name5<>pass5<>5");
@array = sort{(split(/<>/,$b))[2] <=> (split(/<>/,$a))[2]}@list;
こんな感じか?
もうちょい綺麗な書き方ありそうだが…
0420nobodyさん
04/06/20 22:35ID:???このケースで効率的なシューウォーツ変換ってなによ?
シューウォーツ変換が効率的なのは>>418のようなケースだろう。
>>418
@list = map{ $_->[1] } sort { $a->[0] <=> $b->[0] } map{ [(split /<>/)[1], $_] } (...list...);
0421420
04/06/20 22:39ID:???適当に脳内補完してくれ。
理解できてないですが、
テストした結果うまく動いてるようです。
ありがとうございました。
0423415
04/06/20 23:45ID:???私にはさっぱり想像がつかないので、
>>404のケースでの使い方を教えてください。
>>418
数値が一桁固定なら、こんなのも。
my @new = map{ substr($_, 1) }
sort map { pack('A1A*', (split(/<>/))[2], $_) } @list;
0424406
04/06/21 04:08ID:???Perl から PHP を呼ぶ方法は無いのでしょうか
クライアント側の変更をお願いするしかないのかな...お金が飛んで行く〜
0425nobodyさん
04/06/21 05:38ID:???それを以下のような形で全て表示させたい場合、
合理的というか、無駄のない書き方が思い浮かば困ってます。
┌テキスト1
├テキスト2
├テキスト3
└テキスト4
今↓のように書いているのですが、おそらく効率がわるいような気がします。
foreach (0 .. $#hoge) {
my $prefix;
if ($_ == 0) {
$prefix = '┌';
} elsif ($_ == $#hoge) {
$prefix = '└';
} else {
$prefix = '├';
}
print "$prefix$hoge[$_]<br>\n";
}
こういうのを書くことって結構あると思うんですが、
ご教示いただけませんでしょうか。
0426nobodyさん
04/06/21 07:29ID:pRQNX02oこれは「124」となる筈ですよね?
何故か「020305」となります。
もしかしてバグでしょうか?
環境は XP + ActivePerl 5.8.3 です。
0428nobodyさん
04/06/21 08:06ID:???0429nobodyさん
04/06/21 14:53ID:???foreach (0 .. $#hoge) {
printf qq|%s%s<br>\n|, $_ ? $_ == $#hoge ? '└' : '├' : '┌', $hoge[$_];
}
ややブサイコ
>>428
おーい 5.8 だろ?(w
0430nobodyさん
04/06/21 23:07ID:???print "┌$hoge[ 0 ]\n";
for(1..($#hoge-1)){ print "├$hoge[ $_ ]\n" }
print "└$hoge[$#hoge]\n";
0431nobodyさん
04/06/21 23:21ID:???$first = shift @hoge;#効率悪いかも
$last = pop @hoge;
print "┌$first\n";
print "├$_\n" for(@hoge);
print "└$last\n";
0432nobodyさん
04/06/21 23:30ID:???0433nobodyさん
04/06/21 23:47ID:???0434nobodyさん
04/06/22 11:03ID:???jcodeを使っても、sjisの場合とかは第二引数に範囲指定が効かない場合がある。
&jcode::tr (\$value, "0123456789", "0-9");
0435nobodyさん
04/06/22 12:14ID:???ていうか、jcode.plに範囲指定はJISとEUCでしか使えないって書いてあるよ。
;# Range operator like `A-Z' for 2 byte code is partially
;# supported. Code must be JIS or EUC, and first byte
;# have to be same on first and last character.
0436nobodyさん
04/06/22 14:14ID:???FormでボタンAとボタンBを作って、web上でボタンA、Bを押すとそれぞれ
$Xの数値を変える(たとえばボタンAを押したら$x = 1、Bを押したら$x = 2)
というのを作りたいんですが、どうすればいいでしょうか。
教えてください。お願いします。
0437nobodyさん
04/06/22 15:07ID:???0438nobodyさん
04/06/22 15:16ID:???0439nobodyさん
04/06/22 18:00ID:???<input type="radio" name="x" value=1>Aボタン
<input type="radio" name="x" value=2>Bボタン
</form>
−−−hoge.cgi
#! /path/to/perl
use CGI;
$cgi = CGI->new();
$x = $cgi->param('x');
print $cgi->header();
print $cgi->start_html();
print $x;
print $cgi->end_html();
0440nobodyさん
04/06/22 19:37ID:???受け取った一番初めに中身に変な文字列が入っていないかを検査したほうがいいのですか?
変な文字列というのはPERLの命令文とかです。受けたデータをそのまま使うの大丈夫なのかなと
疑問に思ったので質問しました。どなたかお願いします。
0441nobodyさん
04/06/22 19:45ID:???渡すのもあなた、受け取るのもあなた。
変なものを渡さないようにするのもあなたでしょ?
誰か知らない人から受け取るんなら、どんなもの渡したのかその人に聞くか、
中身みて期待値かどうか自分で見て下さい。
どなたか知りませんがお願いします。
0442440
04/06/22 20:24ID:???質問の仕方がわるかったのでしょうか?
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
print $buffer;
とかした場合にJSとかHTMLのタグじゃなくperlの関数とか命令文が入っていた場合に
その命令文が実行されてしまうのですか?という質問です。
お願いします。
0443nobodyさん
04/06/22 20:36ID:???0445440
04/06/22 22:27ID:???ですよね。簡潔で最高な答えありがとうございました。
>>444
鯖はまだなのでhttpdとactiveperlでやってます。どっちにしろレンサバでperlのテストなんか
馬鹿なことしませんけどね。
ところで何故にperlの命令文は無効になるんですか?evalしたら実行されますよね?
#自治厨
スレ違い
>>自治厨
森へお帰り
#444
やってみろよ
>>444
お前の話はつまらん
0446nobodyさん
04/06/22 22:41ID:???0447nobodyさん
04/06/22 23:40ID:???0449nobodyさん
04/06/22 23:56ID:???0450nobodyさん
04/06/23 00:09ID:???具体的には、passwdコマンドをperlから実行し、2回促される
入力をプログラムから自動的に入力させたいといったもの
です。
もしも何か方法があれば教えていただきたい次第です。
宜しくお願い致します。
0451nobodyさん
04/06/23 00:11ID:???0452440
04/06/23 01:16ID:???0453nobodyさん
04/06/23 01:19ID:???0455nobodyさん
04/06/23 02:03ID:???各サブルーチンをスクリプト内に全部記述するのと、
それぞれにライブラリファイルを作成して必要なときのみrequireで読み込むのとどっちがいいんでしょうかね?
いまいち意味不明っぽいですが、つまりは
if ($bar) {
require "hogehoge.pl";
&hogehoge::foo(\$bar);
}
と
if ($bar) { &foo(\$bar); }
のどっちがいいのでしょうか?
0456nobodyさん
04/06/23 02:07ID:???0457nobodyさん
04/06/23 02:26ID:???レスありがとうございます。
使い分け、頭の片隅に置いておきます。
まだまだ常時考えながらはコード書けませんです、はい。
もう少し色んなこと考えながらコード書かないとだめだなぁ…
0459nobodyさん
04/06/23 05:27ID:???http://pc5.2ch.net/test/read.cgi/php/1063562491/861
0460nobodyさん
04/06/23 10:31ID:???4<>あ<>20:02<>
2<>き<>08:41<>
このように並んでいるテキストを、入力された数値によってソートしたいのですが
今は
if($num==1){ };
if($num==2){ };
if($num==3){ };
みたいに書いてるのですが、もっとスマートなやり方は無いでしょうか?
0461nobodyさん
04/06/23 11:41ID:???ちゃんと説明しろ
0462nobodyさん
04/06/23 11:44ID:???見たいにハッシュにぶち込んで、
foreach my $num (sort( keys %data)){
#$data{$num} の処理
}
にする
0464nobodyさん
04/06/23 18:02ID:???さあ帰った帰った。
0466nobodyさん
04/06/23 21:04ID:???$a = $ENV{'HTTP_COOKIE'};
@a = split /\;/,$a;
foreach(@a){
(my $a , my $b) = split /=/;
$form{$a} = $b ;
}
クッキーの中にNAME=VALUEが一つだけでも複数あっても大丈夫のようにしたいんだけど、↑ので
合ってる?一つの場合は@aの中には$aがそのまま入るから一応大丈夫だと思うけど、
ここのお墨付きをもらいにきた。
0467nobodyさん
04/06/23 21:16ID:???チェックぐらい自分でしろ。
http://www.studyinghttp.net/cookies.html
0469nobodyさん
04/06/23 21:39ID:???さあ帰った帰った。
0472440
04/06/23 21:44ID:???>さあ帰った帰った。
ってまるで、ここがあなたの居場所みたいな言い方ですけど、
ここがあなたの居場所なんですか?
0473nobodyさん
04/06/23 21:44ID:???0477nobodyさん
04/06/23 21:47ID:???0480nobodyさん
04/06/23 21:50ID:???ここは質問スレなんだから、喧嘩はよそでやってくれ。
0482466
04/06/23 21:54ID:???おまいは>>469-470だろ?でもまあ俺は単純だから、俺より詳しそうなおまいに
okを出してもらえば、それで安心だよ。ありがとね。
>>467でくれたサイトもいいとこみたいだから見に行くよ。それじゃ。ごめんね。
0483480
04/06/23 21:56ID:???俺にはここに俺ともう二人しかいないようにしか思えないんだが・・・・
そして俺以外の二人に向けて言ったんだけど、まあとりあえず早く正常に戻そうよ。
それでは次の質問どぞ↓
0484440
04/06/23 21:57ID:???いつになったら答えてくれるんですか?恥ずかしくて答えられませんか?
0485nobodyさん
04/06/23 22:10ID:???0486nobodyさん
04/06/23 22:20ID:???ここに解説がある。
http://www2.strangeworld.org/uedakana/perl_tips105.txt
0487nobodyさん
04/06/23 22:22ID:???質問者も悪いが、すぐムキになる回答者もどうかと。
っていうかこのスレの回答者は特有だね。
母親に向かってすぐ「くそババァ!」って連呼するタイプの人間だな。内弁慶っていうかな。
0490nobodyさん
04/06/23 22:53ID:???0491nobodyさん
04/06/23 23:08ID:???俺がくらったじゃねえかよ!マジで鬱・・・・何のウイルス?
色々探したが見つからなかった・・・・ウイルス対策なしの俺がここのURLを見に行くなんて
しくじった。
perl_tipsっていかにも正当な名前なのに。マジで直し方教えてくれ。
0492nobodyさん
04/06/23 23:33ID:???0494491
04/06/24 00:04ID:???ありがとう・・・・スキャンかけたいけど、っていうか対策ソフトいれたいけど、c:\が残り
50MBしかないから・・・・
とりあえず、ブラクラ系みたいなのでほっとしてる。変な症状もないし、スタートアップにも
新しい奴なかったからほっとく。
それにしても何故にこのスレでトロイの木馬が貼られてるんだよ・・・・・そんなに憎悪を抱いたのか?
0496nobodyさん
04/06/24 01:29ID:???ソース見てみたが、ウィルスではないと思うぞ。
<meta http-equiv="Refresh" content="0">と、
コンコンクラッシャーとメールストーム。
ただし、
<img src="http:// www. raus. de/ crashme/">
の部分が完全一致でをウィルスとして認定するらしい。
(全角スペースを空けて反応しないようにしてある)
0497491
04/06/24 02:23ID:???ありがと。その優しさに軽く感動;;
俺実は2回踏んだのね。一度目はセキュリティ中のままで行ったらいきなり画面が真っ青になって
例外なんとかってやつが出て再起動して、レジストリ修復してセーフであげてscandiskとかした後、
普通に立ち上げたらとくには問題ないみたいだった。
2回目はそのソースをブラクラチェッカにかけてみたけど、そのチェッカの使い方がわからずに、セキュリティを
最高に挙げて愚直にトライ。結果同じ症状で再起動した後、同じ事やって今の状況・・・・・・
俺の場合ウイルスのとこに行く前に、例外発生画面になった気がする。クリック1秒未満で画面が何も変化
ないまま次の画面は青い例外発生画面だったから。
ほんと優しくしてくれてありがと。癒されたぽ
0498491
04/06/24 03:13ID:???これだったみたい。一応オンラインのウイルススキャンかけてみたら
このウイルスがテンポラリファイルから4つ検出された。とりあえず危険なものではなくて「ほっ」・・・・
0499nobodyさん
04/06/24 10:36ID:???- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
0500nobodyさん
04/06/24 18:54ID:???警告:ページの有効期限切れ
というメッセージが出るのですが、それが出ないサイトもあるみたいですが、
それはどういう方法を使ってるのですか?PERLでのやりかたが知りたいので教えて下さい。
0501nobodyさん
04/06/24 18:59ID:???0502nobodyさん
04/06/24 19:10ID:???0504500
04/06/24 20:31ID:???キャッシュの制御を<meta>で変えればいいのですか?
>>502
HTTPのヘッダーの辺りということでしょうか?
>>503
getだとできるんですね!getの時はブラウザの戻る、進むでクエリ付きURLだから
そのまま処理をしてくれるということみたいですね。
postの場合は標準入力から読みこむ。それで、postで送ったフォームデータは
セキュリティ上の都合でブラウザ?のデフォルト設定が自動再送信しないようになって
いるんですよね?HTTPのヘッダに何かを追加すると、その設定が変えられるというわけでしょうか?
0505nobodyさん
04/06/24 20:37ID:???0506nobodyさん
04/06/24 20:38ID:???結局違うくて、ノーキャッシュだったと思うんだがなぁ
兎に角何でもかんでも1から10まで全部他人に頼ろうと思わず、
与えられた情報を自分で試す努力しろっての
0507nobodyさん
04/06/24 20:41ID:???0508nobodyさん
04/06/24 21:30ID:???一応header関連だった気がするが、cgiの出力をキャッシュさせるかどうかは
pragma
expires
cache-control
他にもなんかあった気がするけど、HTTPサーバによっては-nphで自分で一からheader
を設定しないと、勝手にno-cacheを吐き出すよ。たしかね。
どうだったっけかな。思い出せない。
0509500
04/06/24 21:56ID:???print "Content-type:text/html\n";
print "Expires:Sun, 06 Nov 2005 08:49:37 GMT"."\n\n";
このようにしてみましたが、効果なしでした。かなり高度なテクニックなんですかね?
0510nobodyさん
04/06/24 22:11ID:???0511nobodyさん
04/06/24 22:13ID:???おまいには悪いが、誰もわからない悪寒・・・・・・・
ついでに>>507のいうようにスレ違いぽ
まあ一応
PERLでどうコーディングしたら出力がUAにキャッシュされるか
という質問みたいだからあながち的ハズレなスレ選びではないが。
どっちにしろ様子をみてる限りではわかる人は今のとこ、まだ来てないんじゃないか?
結局自力で調べるしかない。ガンガレ
0512500
04/06/24 22:19ID:???シェア90%を誇るIEだけクリアできれば満足なんですが、やはり難しいんですね。
cgiの使い勝手のよさを上げようと思っただけなので、無理でも一応機能的には影響はないです。
>>511
応援ありがとうございます。頑張ります!
0513nobodyさん
04/06/24 22:48ID:???いいページ見つけた。俺も後で読んでみるよ。
0515nobodyさん
04/06/24 23:10ID:???心配なときは、一旦グーグルに入れればいいのだ。
■ このスレッドは過去ログ倉庫に格納されています