【Perl】初心者コーナーPart11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/27 12:53ID:wAXxxOxPいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0767nobodyさん
02/04/20 19:34ID:???0768nobodyさん
02/04/20 19:41ID:FTp8XsfB0769nobodyさん
02/04/20 19:47ID:???0770nobodyさん
02/04/20 20:02ID:???0772nobodyさん
02/04/20 20:19ID:???\nのnだとか言ったらアホとしか思えない。
0774nobodyさん
02/04/20 21:04ID:FTp8XsfBおお、ようやく理解できました。
0775nobodyさん719
02/04/21 00:56ID:86gzo8Agバイナリモードにしてみると良いというのを見かけましたので、これを
追加してみたのですが上手くいきませんでした。
>746さん、もしかして「binmode(BIN)」のパラメータの指定が間違って
いますか?ネットで調べて「binmode(STDOUT)」や「binmode($filenum)」
に変更してみたのですが状況は変りませんでした。
しかもよく調べてみると、binmodeはサーバーOSがWindows系の場合の
対応でUNIXでは必要ないとの事らしいので、この対応は意味が無いのかな?
と考えています。
そこで、はじめは自分のHTMLに組み込んで使っていたので、サンプルの
HTMLとCGIをほぼそのまま(変更したのは、環境パスと送信先メールアドレス
と戻り先URLぐらい)の状態でサーバーにアップロードしてから実行しても
あいかわらず画像が崩れてしまい、状況は変りませんでした。
何か他に疑う所はありますでしょうか?
0776nobodyさん
02/04/21 00:58ID:???まずbinmode()についての理解を深めなさい。
動作の解らない関数をコードに入れるなんてナンセンス。
予備知識としてUNIXとDOSのテキストファイル形式の違いも勉強するとなお良し。
0777キリ番厨
02/04/21 02:06ID:???0779nobodyさん
02/04/21 02:27ID:???おせっかい野郎登場ってか?
0782nobodyさん
02/04/21 04:34ID:5EokjXuO煽りにマジフォローしなくても…。
0784nobodyさん
02/04/21 08:39ID:1/Tdsylw配列@a=("hoge1","hoge2","hoge3"〜)で@aの要素として存在する文字列に関して
連想配列%flagを$flag{'hoge1'}=1
というふうにしたいのです。
foreach $_ (@a) {$flag[$_] = 1;}
とするとflagは全部1になってしまいます。
どのようにすればうまく行きますか?
0785nobodyさん
02/04/21 09:02ID:zdYHTsmZちょっと変えて
$n=1;
for ( @a ) { $flag[$_] = $n; $n++; }
とかどうでしょう。
0787nobodyさん
02/04/21 10:00ID:???おまえがどうしたいのかわからないよ。
hoge2の時は?hoge3の時は?
0789784
02/04/21 10:19ID:???hoge2がなければ$flag['hoge2']が1になって欲しくないんです。
よろしくお願いします。
0790784
02/04/21 10:20ID:???@aが可変なんです。
0791nobodyさん
02/04/21 10:33ID:???for (@a) {$flag[$_] = 1;}
こうしたいのか? これじゃ無ければ手に負えん、後は任せたぞ>>793。
0792nobodyさん
02/04/21 10:38ID:???あるかないかは、if defined $flag{...} でわかると思うけど...。
# 何故、連想配列なのに $flag['hoge2'] とか書くの ?
0793nobodyさん
02/04/21 10:39ID:???存在するかを調べればいいことだろ。
で、おまえがなぜこの程度のことを出来ないのかがわからない。
0794784
02/04/21 11:18ID:???[]としていたせいだったっぽいです。792さんに指摘されて気づきました。
大変お騒がせしました。
ところでみなさんforeachって書かないんですね。
0795nobodyさん
02/04/21 13:11ID:???人の自由さ。foreachとforはほぼ同じだし
0796nobodyさん
02/04/21 13:20ID:???0797やさしいお兄さん
02/04/21 13:58ID:???こういうことでは?
@a=("hoge1","hoge2","hoge3");
@flag{@a}= (1) x @a;
for ( keys %flag ){
print $_,": ",$flag{$_},"\n";
}
0798nobodyさん
02/04/21 16:03ID:???0799nobodyさん
02/04/21 16:05ID:???激しく同意
0800nobodyさん
02/04/21 16:05ID:???0801nobodyさん
02/04/21 16:12ID:???前のページでテキストボックスから送られてきたデータの中に、 " が入ってると
処理がうまくいかないです。んで、置換しようと思ったのですが
$test =~ /"/\"/g;
とかやっても置換してくれません。お助けくだされ。
0802nobodyさん
02/04/21 16:14ID:???具体的に問題となった処理を提示してください。
0803nobodyさん
02/04/21 16:21ID:???何がどううまくいかないのか、さっぱりわかりません。
ついでに、
$test =~ /"/\"/g;
これはコンパイルエラーになります。
0804名無しさん@edlin
02/04/21 16:27ID:???$test =~ s/"/\\"/g;
でしょ?
0805nobodyさん
02/04/21 16:30ID:???0806nobodyさん
02/04/21 16:35ID:???0807nobodyさん
02/04/21 16:41ID:???.
0808定型文
02/04/21 16:41ID:???0810nobodyさん
02/04/21 16:45ID:???------------------仕切りなおして再開-----------------
0811コレが真実だ!
02/04/21 16:47ID:???0812nobodyさん
02/04/21 16:48ID:???0813nobodyさん
02/04/21 17:01ID:???0815nobodyさん
02/04/21 17:31ID:???0816nobodyさん
02/04/21 17:37ID:???0817nobodyさん
02/04/21 17:40ID:???0818nobodyさん
02/04/21 17:48ID:???認めろよ(藁)
0819nobodyさん
02/04/21 18:06ID:???等はこう書きたかったと思われ。
_gunzip=神 >>>>>> japu=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> Dream★=異常性愛車 > 弐編=厨房
Dream★は自覚してるんだねw
0820nobodyさん
02/04/21 18:10ID:???0821469
02/04/21 18:13ID:???これだけは認めろよな。
0822nobodyさん
02/04/21 18:17ID:???仮にそれを認めたとしたって
_gunzip氏>>>(以下略)821
こうなるのは明白。
0828nobodyさん
02/04/21 18:47ID:???http://jarl.sourceforge.net/
まぁ825が一番バカなわけだが。
0829469
02/04/21 18:48ID:???0830469
02/04/21 18:49ID:???0831nobodyさん
02/04/21 19:20ID:???1. if ($string eq "hoge") {
2. if($string eq "hoge"){
3. if ( $string eq "hoge" ) {
4. if( $string eq "hoge" ){
どれが好きですか?細かいけど
0832_gunzip
02/04/21 20:05ID:???いろいろ指摘ありがとうございます。
素直に$_[0], $_[1]を利用して
--------------------------
#!/usr/bin/perl -w
use strict;
sub mapup (& \@ \@)
#(code_ref $code, array_ref $_a, array_ref $_b)
{
my($code, $_a, $_b) = @_;
my @retval;
my $max_index = (@$_a < @$_b) ? @$_a : @$_b;
for my $i (0 .. $max_index - 1) {
push @retval, $code->($_a->[$i], $_b->[$i]);
}
return @retval;
}
my @a = (1, 2, 3);
my @b = (0, 8, 7);
my @c = qw[ G C A T ];
my @d = qw[ C G T A ];
my @sum = mapup { $_[0] + $_[1] } @a, @b; # (1, 10, 10)
my @pro = mapup { $_[0] * $_[1] } @a, @b; # (0, 16, 21)
my @bigger = mapup { $_[0] > $_[1] ? $_[0] : $_[1] } @a, @b; # (1, 8, 7)
my @concat = mapup { $_[0] . "-" . $_[1] } @c, @d; # (G-C,C-G,A-T,T-A)
-----------------
とした方が良かったですね。
(わざわざsortに似せて$a, $bを使おうとして、かえって不便に)
0833名無しさん@edlin
02/04/21 20:25ID:???もちろん1
0835nobodyさん
02/04/21 21:44ID:???細かいが
if ($string eq 'hoge') {
「"」より「'」の方が変数置換無い分だけ早そうな気がするが、嘘かも。
0836nobodyさん
02/04/21 22:29ID:???0837nobodyさん
02/04/21 22:51ID:???0838nobodyさん
02/04/21 23:35ID:IQt5PbmuCGI 用にコンパイル無し、インタプリタとして動かしてるなら効果ある?
0839名無しさん@edlin
02/04/21 23:47ID:???それはちょっと勘違いしている。
通常のインタプリタとして実行する時も、中間コードにコンパイル
され、実行されるんだけど、その「コンパイル」を指してるんだよ。
0842nobodyさん
02/04/22 04:49ID:5JDbu1pPどのようにすればいいのでしょう。
sprintf(); で簡単に記述できたと思ったのですが
どうしても見つかりません。
ご存じの方いましたら教えてください。
0843nobodyさん
02/04/22 06:05ID:???sprintfを使った方法が見つからないのでごめんなさい。
0844nobodyさん
02/04/22 06:44ID:???0845nobodyさん
02/04/22 09:02ID:???$_ = reverse join ',', grep !/^$/, split /(\d\d\d)/, reverse $_;
0846nobodyさん
02/04/22 09:40ID:???クライアント様のご要望で、どこかにsprintfを噛まさないといけないようです。
$d = reverse sprintf "%s", join ',', reverse($d) =~ /\d{1,3}/g;
つーかメモ。
0847nobodyさん
02/04/22 11:39ID:???perldoc perlop によると、
# put commas in the right places in an integer
1 while s/(.*\d)(\d\d\d)/$1,$2/g; # perl4
1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/g; # perl5
だそうです。
ちなみに、オレ自身、コレがどういう理屈(仕組み)でうまくいくのか
理解してません。でも、ちゃんと動いてる。うーむ。
0848712
02/04/22 21:42ID:bQF56S81以下の方法でなんとか形にはなりました。
use LWP::UserAgent;
use HTTP::Cookies;
$ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new("",autosave => 1));
$request = HTTP::Request->new('GET', "http://XXX.com/YY.asp?ID=ID&PASS=PASS");
$response = $ua->request($request)->as_string;
$request = HTTP::Request->new('GET', "http://XXX.com/ZZZ.asp?・・・・");
$response = $ua->request($request)->as_string;
print $response;
0849nobodyさん
02/04/22 22:37ID:???これをPerlでやる方法はどうすればよいのでしょうか?
ルートのところがよくわからん・・・。
0851nobodyさん
02/04/22 22:44ID:???0852nobodyさん
02/04/22 23:39ID:NaATCEmQこの質問、FAQだと思うんですが、FAQをまとめた所が無いし
過去スレにも載ってないようなので、質問しました。
0853Dream 黒星
02/04/23 00:36ID:???g オプションは意味がないから外せ!
でも、もっと速い方法があるが... オマエ等にはそれで十分だ。
0854nobodyさん
02/04/23 02:52ID:???if(coreファイルがあるか?){
unlink(coreファイル);
}
0855847
02/04/23 03:35ID:???オレに言わないでくれ・・・
「/gだけじゃうまくいかないこともあるんだよ」っつー例として
に載ってたので、仕方なくついてんだろうよ。
あんたが本当にもっと速い方法を知ってるのかどうかわからんが、
もうこのスレでオナニーカキコはやめてくれ。頼むよ。
0856842
02/04/23 04:34ID:???勉強になりました。ありがとうございます。
0857nobodyさん
02/04/23 15:37ID:???/☆" ̄ ゙̄ヽ/
__ Y´ノノノ"ヽヽヽ / ̄ ̄ ̄ ̄
. ヾcヽ.l(| ∩ ∩|)| < Dream は天然ばか♪
\ \、 ▽ ノjl| |
`く ヾ=oノ_ブ゙i \___
i (;) ,___|
|___| .|
| i| (,,ノ
| 7 ノ
|_l\ノ,>
. | | |_ノ
. (_)
0858nobodyさん
02/04/23 17:35ID:???は分かるんですが、
1 while
はどういう意味なんでしょうか?
低レベルな質問ですいません。
0859nobodyさん
02/04/23 20:13ID:???f() while expr;
if(expr){ f() }
f() if expr;
foreach (expr){ f() }
f() foreach expr;
0860nobodyさん
02/04/23 20:21ID:???0861nobodyさん
02/04/23 20:39ID:???マッチングのチェックをするポイントが移動するから。
gオプションは「何度も繰り返す」じゃなくて「最初の一回で終了をしない」というものだから。
0862nobodyさん
02/04/23 22:03ID:trg6QFfS$temp{aaa}[1] = 'bbb';
foreach(0..1){
print;
}
↑の変数は何なのですか?
@temp{aaa} = ('aaa','bbb');
だとダメだし。。。
0864nobodyさん
02/04/23 23:11ID:???ハッシュに配列リファレンスが入ってるのではないでしょうか。
0865(´-`).。oO(もれそう…)
02/04/23 23:15ID:???print "$temp{aaa}[$_]\n" foreach (0..$#{$temp{aaa}});
0866nobodyさん
02/04/23 23:51ID:???こんなの出来ないのか?と思ってやったらずばりできたので
質問させてもらいました。
ありがとうございました。
>>865
(・∀・)<バカっていったやつが〜〜の起源はこんな感じか?
まさに何をしたいわけでも無いです。
反射的にバカバカいう、かつ自分も〜な人に教えを請うつもりはありません。
■ このスレッドは過去ログ倉庫に格納されています