Perlコーディング初心者質問スレ Part 46
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/18(水) 02:17:46ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0153nobodyさん
2006/01/22(日) 16:01:49ID:???すいません、ここの箇所だけが分からなくて。。。
その方法でかまわないと思います。
パラメーターの解釈ってどうなるんですか?
そのcgiのURLを引っ張り出して、そこに PARA=Aが含まれるか?とかですか?
もし、よければどのような形になるか書いてもらえませんでしょうか?
例えば、呼び出すA.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>
呼び出すB.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>
としてですね。
0154nobodyさん
2006/01/22(日) 16:15:37ID:???0155nobodyさん
2006/01/22(日) 16:23:24ID:???「ここの箇所だけ」が分からないんじゃない。
それが分からないのは CGI の基礎が全然分かってないってこと。
0156nobodyさん
2006/01/22(日) 16:31:34ID:???ここは小学生の相手をする学童保育所じゃないんで、
CGIの仕組みを勉強してから来てね
0157nobodyさん
2006/01/22(日) 16:42:49ID:???0158nobodyさん
2006/01/22(日) 17:20:29ID:???登録時にプルダウンメニューから入力させているのですが
登録内容の変更・削除時にあらかじめ登録していた内容が
プルダウンで表示されるようにすることはできるのでしょうか?
<OPTION>タグでselected指定をすれば実現すること自体は分かっているのですが。
どうしても難しそうだったら、変更の度に新たに入力し直してもらおうと思ってはいますが
登録側に不親切だと思うので、できれば実現したいです。
0159nobodyさん
2006/01/22(日) 17:47:41ID:???1. 「あらかじめ登録していた内容」を読む。
2. それに基いて適宜 selected な <option> を吐く。
必要なのはこれだけ。
どうしても難しそうなのは、回答の度に新たな質問が生成し直されそうな点ですが
回答側が不機嫌になりかねないので、できればもう少し基礎を学んで欲しいです。
0160158
2006/01/22(日) 17:52:20ID:???ごめんなさい、そしてありがとう。
0161nobodyさん
2006/01/22(日) 18:08:15ID:???0162nobodyさん
2006/01/22(日) 18:34:46ID:???メールにインラインフレームの記述した HTML を書き個数だけ用意して、
メールにその HTML のアドレスを書きゃぁいいのでぁ?
AD, AE, AF
BD, BE, BF
CD, CE, CF
0164nobodyさん
2006/01/22(日) 18:59:27ID:???いちいちレスしている暇があるなら、CGIの基礎を学んでこい!
その方が早い。
マジ話、基礎中の基礎だからな。
ちょっと勉強すればわかるって程度の話なんだからな。
0165nobodyさん
2006/01/22(日) 21:29:59ID:???とか思ったり
0166nobodyさん
2006/01/24(火) 23:59:54ID:8wVWM4jMということをしたいのですが、エラーになってしまいます。
どこが間違えていますか?
がんばって考えてみたがエラーで鬱な部分_| ̄|○
↓
if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
0167166
2006/01/25(水) 00:01:27ID:Ofc3DeTHcgi-lib.plを使って、$in{"q1"}で変数の中身を取り込んでいます。
0168nobodyさん
2006/01/25(水) 00:04:06ID:???if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
〜 〜
なんというか…フォント変えたほうが良いんじゃないか…
0169nobodyさん
2006/01/25(水) 00:09:09ID:???}と]の間違い
単純に
if($in{"q1"}){ $message2 .= $in{"q1"}; }
じゃまずいのか?
0170nobodyさん
2006/01/25(水) 00:09:29ID:Ofc3DeTHぐはーーーー、これで3日間悩んでいますた。
ありがとうございます・・・うぅ。
まさかこんなオチとは_| ̄| . . . ○
0171nobodyさん
2006/01/25(水) 00:10:36ID:Ofc3DeTHありがとうございます。
「空かどうかの判断」はそういう記述でもOKなんですね。
0172nobodyさん
2006/01/25(水) 00:14:24ID:???それだと"0"のときも空扱いなのに注意。
むしろ空なんだったら繋いでも結果変わらないんだから
$message2 .= $in{"q1"};
これだけで良くない?definedか調べるのなら解るけど
# 漏れの書き込みがずれてるし…フォント変えとこう:-p
0173nobodyさん
2006/01/25(水) 01:45:33ID:???でいいんじゃないかな・・・
0175nobodyさん
2006/01/25(水) 02:10:15ID:???$text1, $text2, . . . $text50
改行処理をして、
$text1
$text2
$text3
.
.
.
$text50
としたいのですが、文字列に全角36文字文で「\n」を入れたいんです。
半角や数字・記号等が混じっているのですが、どのように挿入するのでしょうか?
0176nobodyさん
2006/01/25(水) 02:13:47ID:???0177nobodyさん
2006/01/25(水) 02:15:29ID:???0178nobodyさん
2006/01/25(水) 02:16:22ID:???0183181
2006/01/25(水) 02:46:39ID:???require "jcode.pl";
require "fold.pl";
require "cgi-lib.pl";
$bytes = '72';
$text=$in{"text"};
jcode::convert(\$text, "euc");
while (length($text)) {
(my $text_mod, $text) = fold($text, $bytes);
$text_mod .= $folded, "\n";
}
print "$text_mod";
最終的には改行された(\nの入った) $text_modができたらいいのに難しいです・・・。
0185nobodyさん
2006/01/25(水) 02:55:57ID:???>>184
配列を使おうと勉強しているのですが、
@が出ると眠くなってしまうので、できたためしがありません。
@_ とかの独特の表記がまだ飲み込めません。
0187nobodyさん
2006/01/25(水) 03:49:07ID:???0188nobodyさん
2006/01/25(水) 04:10:50ID:???0189nobodyさん
2006/01/25(水) 10:15:17ID:???> > @が出ると眠くなってしまうので
> おまえはトンボか? グルグルグル。
ウケタ...今度使わせて貰うw
0190nobodyさん
2006/01/25(水) 10:55:53ID:???△
0191nobodyさん
2006/01/25(水) 22:22:06ID:???$AAA[0]=$AAA[0]+1+$RR;
$AAA[1]=$AAA[1]+1+$RR;
と
$AAA[1]=sprintf("%03d",$AA[1]);
$AAA[2]=sprintf("%03d",$AA[2]);
って、もっと効率よく記述できませんでしょうか
0192nobodyさん
2006/01/25(水) 22:29:35ID:???0193nobodyさん
2006/01/25(水) 22:38:09ID:???map とか foreach とか。
@AAA = map { $_ + 1 + $RR } @AAA;
$_ = $_ + 1 + $RR foreach @AAA;
@AAA = map { sprintf('%03d', $_) } @AA;
0194nobodyさん
2006/01/25(水) 22:38:35ID:???効率よくするのはその部分だけ見せられてもほとんど無理だが、
見やすくするならforeachやmapが有効。
その操作は配列全体に行うの?配列全体になら
$RR = int(rand(2)) + 1;
$_ += $RR foreach @AAA;
及び
@AAA = map { sprintf("%03d",$_) } @AA;
配列の一部だけなら@AAA[0,1]のように配列の一部を指定すればOK。
その場合それが見やすくなるかは微妙だけど
0197nobodyさん
2006/01/25(水) 23:46:22ID:???$hoge = '10';
&fuga($hoge);
print $hoge;
sub fuga(){
$aaa = @_ + 50;
return $aaa;
}
結果は「60」になると思ったのですが「10」でした。どこかが間違えているのでしょうか?
$hoge に fugaサブルーチン を通した結果を表示させたいです。
0198nobodyさん
2006/01/25(水) 23:50:34ID:???0199197
2006/01/26(木) 00:03:19ID:???$hoge = '10';
&fuga($hoge);
print $hoge;
sub fuga(){
$aaa = @_ + 50;
return;
}
returnだけで値を返したつもりですがこれでも「10」です・・・。
0200nobodyさん
2006/01/26(木) 00:11:19ID:???@hoge = (10, 20, 30);
print &fuga(@hoge);
sub fuga(){
my($total);
foreach (@_){
$total += $_;
}
return $total;
}
0201nobodyさん
2006/01/26(木) 00:37:33ID:???$moge = fuga($hoge);
print $moge;
sub fuga(){
$aaa = $_+50;
return $aaa;
}
0202nobodyさん
2006/01/26(木) 00:46:45ID:???$hoge = 10;
$moge = fuga($hoge);
print $moge;
sub fuga(){
$aaa = $_[0]+50;
return $aaa;
}
0203nobodyさん
2006/01/26(木) 02:00:59ID:???ちょっと↑見たら早速両方のパターン
&あるとわかりやすいとかくらいしかメリットないのかな
0204nobodyさん
2006/01/26(木) 02:25:15ID:???この質問結構出るな…
この話題から論争になったことがあるのでFAQを挙げるだけに留めて置く事にする。
ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
漏れの好みとしては必要ないなら&つけない
0205nobodyさん
2006/01/26(木) 03:21:18ID:???&foo();
のようにしてる。
渡す値が無くても括弧はつけてるかな。
ちゃんと関数が呼ばれて意図した動作なら「お好きなように」って感じかな
0206nobodyさん
2006/01/26(木) 06:40:19ID:???time 関数を HiRes モジュールからインポートして使おうと思っているのですが、
インポートする際に関数を別名でインポートすることはできますか?
HiRes の time() は mtime() とかっていう名前で扱いたいので・・・
0207nobodyさん
2006/01/26(木) 06:51:16ID:???0208nobodyさん
2006/01/26(木) 06:56:34ID:???use Time::HiRes;
BEGIN { $::{mtime} = *Time::HiRes::time }
0209nobodyさん
2006/01/26(木) 06:58:32ID:???なんか気持ち悪いw
&mtime();
のようにして呼び出すことはモジュールを書き換えない限り無理ってことなのかな?
0210nobodyさん
2006/01/26(木) 06:59:05ID:???0211208
2006/01/26(木) 07:03:01ID:???>>206
Time::HiResはExporterを使ってExportしているだけなので、
Exporterがやる仕事を自前で書いてやれば良い。
で、それは何かというと使用する側のパッケージのシンボルテーブルに
指定されたシンボルをエクスポートするということなので
BEGINブロックの中でその操作を行うと>>208のようになる
0212nobodyさん
2006/01/26(木) 07:10:34ID:???Exporter とか BEGIN とかそこらへんを勉強してきます。
ありがとうございました。
0213nobodyさん
2006/01/26(木) 09:55:58ID:o/1/VUZ9sub bynumber{ $a <=> $b}; }
@number = sort bynumber @number;
配列の値を数値で並べる方法なんだそうだが、
サブルーチンがどういう働きしてるかさっぱりわからん。
誰か解説お願いします。
0214nobodyさん
2006/01/26(木) 10:27:31ID:???些細なことなんですが・・・
*Time::HiRes::time
の time のケツにセミコロンがありませんが (strict で書いてるけどエラー無し)、付けたほうがいいです・・・よね?
0215nobodyさん
2006/01/26(木) 10:29:21ID:???昇順でソート
配列に入れる値が既に並んでしまってるのでもっとばらけて入れてみるとわかるかと
ちなみに
$b <=> $a
ってすると降順になります
0216nobodyさん
2006/01/26(木) 10:33:59ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_LIST と
http://perldoc.jp/docs/perl/5.6.1/perlop.pod の「Equality Operators」参照。
>>214
つか
use Time::HiRes (); # どのシンボルも輸入しない
# サブルーチンだけを現在の名前空間に選択的に輸入
BEGIN { *mtime = \&Time::HiRes::time }
の方が良い。
0217213
2006/01/26(木) 11:11:15ID:???それは知ってるんですが原理がわからない・・・
>>216
そこに書いてあること読んだらなんとなくわかったような・・・
サンクスです。もうこれはこういうものとして覚えておきます。
0218nobodyさん
2006/01/26(木) 11:25:41ID:???・$aと$bというグローバル変数に比較用の2つの値が入れられる
・<=>やcmp演算子は比較して-1か0か1を返す
・sortに与えられたサブルーチンの戻り値が-1か0か1かでどう入れ替えるか決定する
例えば @new = sort { 1 } @old; とすればsort演算子は全ての比較結果が1となったものと認識する。ソートにならないが。
0220nobodyさん
2006/01/26(木) 14:24:27ID:ltI+aLo5$1と$2のリストをそれぞれ違う配列に入れたいのですがどのようにしたら良いでしょうか?
どなたか教えて頂けると嬉しいです。。
0221nobodyさん
2006/01/26(木) 14:27:08ID:???push(@list2, $2);
0222220
2006/01/26(木) 14:33:36ID:???###$data###
3 6
2 8
9 2
となっていたとき、
@test == qw(3 2 9);@test2 == qw(6 8 2);
となる様に/(\d) (\d)/の正規表現を利用して処理をしたいです。
二回正規表現を通して処理をすることも出来るのですが、単純に二倍の処理量になってしまうので。。
0224nobodyさん
2006/01/26(木) 14:52:35ID:???my $data = <<'EOD';
3 6
2 8
9 2
EOD
my(@test, @test2);
push(@test, $1), push(@test2, $2) while $data =~ /(\d) (\d)/g;
print join ' / ', 'test', @test, "\n";
print join ' / ', 'test2', @test2, "\n";
0226nobodyさん
2006/01/26(木) 15:08:19ID:pZnDhk3yなゆ板 を探してます。
なゆ板本体一式、提供よろしく。
0228nobodyさん
2006/01/26(木) 15:49:07ID:???【CGI】こんなCGI探してますver.19
http://pc8.2ch.net/test/read.cgi/hp/1134255607/
0229nobodyさん
2006/01/26(木) 15:57:50ID:pZnDhk3yありがとん
0230nobodyさん
2006/01/27(金) 02:13:52ID:fitN0QJiどうしても分かりません。
どうして下記スクリプトのパターンA/Bは違う結果が出るのでしょうか?
---
#!/usr/bin/perl
use strict; use Jcode;
my $henka= "%CA%D1%B2%BD"; #EUC / URIエスケープ / 変化
my $encoding = 'utf8';
my $j = new Jcode;
# パターンA
my $a1 = uri_decode( $henka ); my $a2 = encode( $a1, 'utf8' );
# パターンB
my $b = encode( uri_decode( $henka ), 'utf8' );
# 書き出し
print "Content-type: text/html\n\n";
print "パターンA:" . $a1 . " / " . "<br />パターンB:" . $b;
exit;
# サブルーチン
sub encode {
my( $str, $enc ) = @_;
$enc = $encoding unless( $enc );
return( $j->set(\$str)->$enc );
}
sub uri_decode {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return( $str );
}
0231230
2006/01/27(金) 02:15:51ID:???見づらいかも知れません。
なお、Perl 5.8.3
スクリプトの文字コードはUTF-8です。
0233230
2006/01/27(金) 02:52:17ID:fitN0QJiEUC-JPでURIエスケープされた「変化」である
「%CA%D1%B2%BD」を取得したいのですが、
どうしても出来ません。
どなたかご指摘いただけないでしょうか?
Perl 5.8.3 / UTF-8
---
#!/usr/bin/perl
use strict;
use warnings;
use Jcode;
my $word = "変化";
my $j = new Jcode;
# EUCに変換
my $word = $j->set(\$word)->euc;
# URIエスケープ
$word =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$word =~ tr/ /+/;
# 書き出し
print "Content-type: text/html\n\n";
print $word;
exit;
0234nobodyさん
2006/01/27(金) 03:01:30ID:???0235233
2006/01/27(金) 03:07:08ID:???いや、他の単語だと問題なく取得できるんですよ。
ちなみにURIエスケープは、Perlメモさんのコードを流用しています。
昔よく見たsjis系の文字化けのEUC版かな?と思いきや、
ネットにそういう情報転がってないですし…
正直、お手上げ状態になってます。
0236nobodyさん
2006/01/27(金) 03:16:24ID:???0237nobodyさん
2006/01/27(金) 03:16:57ID:???0239nobodyさん
2006/01/27(金) 03:26:57ID:???my $word = $j->
2回myしてるのは何か意味ある?失礼ながらだけど。
0240nobodyさん
2006/01/27(金) 03:27:15ID:???ネットに情報、転がってますよ。
ttp://naoya.dyndns.org/~naoya/mt/archives/000611.html
ttp://www.hikoboshi.org/perl/doc/encode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
0241nobodyさん
2006/01/27(金) 03:31:49ID:???「できません」じゃなくて
「これこれの結果を期待したが結果はこれこれでした」でしょ。
あと他の例だとどうなったとか。
まぁぶっちゃけそんなこと書かなくても解るがな。
0242nobodyさん
2006/01/27(金) 03:36:30ID:???単にJcodeが渡された文字のエンコード判定できなかっただけだと思う。
my $word = $j->set(\$word,'utf8')->euc;
ってやってみ。
0243233
2006/01/27(金) 03:43:34ID:???よれよれ具合を如実に表してます。typoですorz
>>240
UTF8フラグに関わることしてないと思うんですが
いかがでしょう?
>>241
ごくシンプルな例なので必要ないかと判断しました。
でも言葉足らずだったとは思います。
ご指摘ありがとうございました。
>>242
ビンゴでした!
入力コードの自動判定失敗の理由は不明ですが、
常に明示しておいた方がよさそうですね。
ありがとうございます。
0244nobodyさん
2006/01/27(金) 09:39:12ID:???処理A
処理A終了・・・
system("hoge.pl 43232"); ←これの中でsleep 30;をやっている
みたいな書き方だと、一部のブラウザでは30秒ウェイトが発生してしまいます。
普通に、コマンドみたいな形でキックしたいだけなんですが、system以外に何か良いコマンドはないでしょうか?
0246ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/27(金) 12:17:01ID:???待ち状態なら後からキャンセルもできるし。
0247nobodyさん
2006/01/27(金) 12:55:57ID:???使えれば便利だろうけど。
0248nobodyさん
2006/01/27(金) 13:46:48ID:???else {}
と
if (A != B) {}
else { }
とでは、どちらが速いでしょうか
0249nobodyさん
2006/01/27(金) 14:04:36ID:???0250nobodyさん
2006/01/27(金) 15:34:07ID:???0251nobodyさん
2006/01/27(金) 15:41:22ID:???0252nobodyさん
2006/01/27(金) 15:44:22ID:???■ このスレッドは過去ログ倉庫に格納されています