トップページ⇒php
984コメント309KB

【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:???
改行だけchop
0768nobodyさん02/04/20 19:41ID:FTp8XsfB
それだったらchopnとかになりそうだけど、なぜmが選ばれたのか、そしてなぜoとpの間に挿入されたのかがわかりません。
0769nobodyさん02/04/20 19:47ID:???
そういうことに疑問を持たない方が賢くなれますよ
0770nobodyさん02/04/20 20:02ID:???
ちょむぷ
0771nobodyさん02/04/20 20:17ID:???
>>768 語呂が悪いからだろ。
0772nobodyさん02/04/20 20:19ID:???
何故nなのか小一時間(以下略

\nのnだとか言ったらアホとしか思えない。
0773nobodyさん02/04/20 20:59ID:???
>>766
chomp
[動詞]. (むしゃむしゃ)かむ.
0774nobodyさん02/04/20 21:04ID:FTp8XsfB
>>773
おお、ようやく理解できました。
0775nobodyさん71902/04/21 00:56ID:86gzo8Ag
>743さん、私もそう考えてネットで調べてみた結果、binmodeを使って
バイナリモードにしてみると良いというのを見かけましたので、これを
追加してみたのですが上手くいきませんでした。

>746さん、もしかして「binmode(BIN)」のパラメータの指定が間違って
いますか?ネットで調べて「binmode(STDOUT)」や「binmode($filenum)」
に変更してみたのですが状況は変りませんでした。
しかもよく調べてみると、binmodeはサーバーOSがWindows系の場合の
対応でUNIXでは必要ないとの事らしいので、この対応は意味が無いのかな?
と考えています。

そこで、はじめは自分のHTMLに組み込んで使っていたので、サンプルの
HTMLとCGIをほぼそのまま(変更したのは、環境パスと送信先メールアドレス
と戻り先URLぐらい)の状態でサーバーにアップロードしてから実行しても
あいかわらず画像が崩れてしまい、状況は変りませんでした。
何か他に疑う所はありますでしょうか?
0776nobodyさん02/04/21 00:58ID:???
>>775
まずbinmode()についての理解を深めなさい。
動作の解らない関数をコードに入れるなんてナンセンス。
予備知識としてUNIXとDOSのテキストファイル形式の違いも勉強するとなお良し。
0777キリ番厨02/04/21 02:06ID:???
スリーセブンオメ>俺
0778nobodyさん02/04/21 02:20ID:???
>>775
どっかのUp板にそのIスクリプトUpしてくれると、なにかわかるかも。
0779nobodyさん02/04/21 02:27ID:???
>778
おせっかい野郎登場ってか?
078077802/04/21 02:36ID:???
>>779
すまん、そのとーりだ。Upしなくていいよ>>775
0781nobodyさん02/04/21 02:55ID:???
>>780
煽りにマジレスしなくても…。
0782nobodyさん02/04/21 04:34ID:5EokjXuO
>781
煽りにマジフォローしなくても…。
0783nobodyさん02/04/21 05:35ID:???
(´-`).。oO(煽り厨の >>779 = >>782 [ID:5EokjXuO] はCGIスレでも大活躍だね・・・・)
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
>>784
ちょっと変えて
$n=1;
for ( @a ) { $flag[$_] = $n; $n++; }
とかどうでしょう。
0786nobodyさん02/04/21 09:50ID:???
>>785
ありがとうございます。$flag[$_]=1の間違いですか?
どちらにしても上手くいかないようです。
0787nobodyさん02/04/21 10:00ID:???
>784
おまえがどうしたいのかわからないよ。
hoge2の時は?hoge3の時は?
0788nobodyさん02/04/21 10:10ID:???
>>784
全部1でOKなんじゃないの?
それとも出現回数をカウントしたいわけ?
078978402/04/21 10:19ID:???
@aに文字列があるかどうかを調べたいんです。
hoge2がなければ$flag['hoge2']が1になって欲しくないんです。
よろしくお願いします。
079078402/04/21 10:20ID:???
ああ、そうか。書き方が悪かったです。
@aが可変なんです。
0791nobodyさん02/04/21 10:33ID:???
%flag = ();
for (@a) {$flag[$_] = 1;}
こうしたいのか? これじゃ無ければ手に負えん、後は任せたぞ>>793。
0792nobodyさん02/04/21 10:38ID:???
for $_ (@a){ $flag{$_} = 1 } じゃダメなの ?
あるかないかは、if defined $flag{...} でわかると思うけど...。
# 何故、連想配列なのに $flag['hoge2'] とか書くの ?
0793nobodyさん02/04/21 10:39ID:???
そりゃ1かどうかの問題じゃなくてハッシュにキーが
存在するかを調べればいいことだろ。
で、おまえがなぜこの程度のことを出来ないのかがわからない。
079478402/04/21 11:18ID:???
すみません。単純に連想配列の表現に{}とするところを
[]としていたせいだったっぽいです。792さんに指摘されて気づきました。
大変お騒がせしました。
ところでみなさんforeachって書かないんですね。
0795nobodyさん02/04/21 13:11ID:???
>794
人の自由さ。foreachとforはほぼ同じだし
0796nobodyさん02/04/21 13:20ID:???
ほぼ、どころか全く同じだったり。
0797やさしいお兄さん02/04/21 13:58ID:???
>784
こういうことでは?

@a=("hoge1","hoge2","hoge3");
@flag{@a}= (1) x @a;
for ( keys %flag ){
    print $_,": ",$flag{$_},"\n";
}
0798nobodyさん02/04/21 16:03ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房
0799nobodyさん02/04/21 16:05ID:???
>>798
激しく同意
0800nobodyさん02/04/21 16:05ID:???
800げt
0801nobodyさん02/04/21 16:12ID:???
変数内のダブルクオーテーションは、どやって置換すればいいでしょうか?

前のページでテキストボックスから送られてきたデータの中に、 " が入ってると
処理がうまくいかないです。んで、置換しようと思ったのですが
$test =~ /"/\"/g;
とかやっても置換してくれません。お助けくだされ。
0802nobodyさん02/04/21 16:14ID:???
>801
具体的に問題となった処理を提示してください。
0803nobodyさん02/04/21 16:21ID:???
>801
何がどううまくいかないのか、さっぱりわかりません。
ついでに、
$test =~ /"/\"/g;
これはコンパイルエラーになります。
0804名無しさん@edlin02/04/21 16:27ID:???
>>801
$test =~ s/"/\\"/g;
でしょ?
0805nobodyさん02/04/21 16:30ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房



0806nobodyさん02/04/21 16:35ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房






0807nobodyさん02/04/21 16:41ID:???
弐編=神 >>>>>>>>>> Dream★=上級者 >>>>>>>> やさしいお兄さん=中級者 >>>>> 初心者 >>>>>>> japu=異常性愛車 >> _gunzip=厨房



















.
0808定型文02/04/21 16:41ID:???
Dream★必死だな。
0809nobodyさん02/04/21 16:44ID:???
>>805-807
激しく同意。
激しく同意
0810nobodyさん02/04/21 16:45ID:???
------------------------終了------------------------

------------------仕切りなおして再開-----------------
0811コレが真実だ!02/04/21 16:47ID:???
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房
0812nobodyさん02/04/21 16:48ID:???
みんな死ねよ!
0813nobodyさん02/04/21 17:01ID:???
Dream★くん、荒らすなよ。
0814nobodyさん02/04/21 17:20ID:???
>>811 全くその通りだな。
0815nobodyさん02/04/21 17:31ID:???
Dream ★ = 469 うざい。
0816nobodyさん02/04/21 17:37ID:???
Dream ★ って臭うな。 糞したれケツぐらい拭けよ。
0817nobodyさん02/04/21 17:40ID:???
嵐は無視ということでお願いします。
0818nobodyさん02/04/21 17:48ID:???
弐編=神 >>>>>> Dream★=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> japu=異常性愛車 > _gunzip=厨房



認めろよ(藁)
0819nobodyさん02/04/21 18:06ID:???
>>798>>805-807>>811>>813>>818
等はこう書きたかったと思われ。

_gunzip=神 >>>>>> japu=上級者 >>>>>> やさしいお兄さん=中級者 >>>> 初心者 >>>>>>> Dream★=異常性愛車 > 弐編=厨房

Dream★は自覚してるんだねw
0820nobodyさん02/04/21 18:10ID:???
PerlTkに詳しい人はいませんか?
082146902/04/21 18:13ID:???
_gunzip=厨房

これだけは認めろよな。
0822nobodyさん02/04/21 18:17ID:???
>821
仮にそれを認めたとしたって
_gunzip氏>>>(以下略)821
こうなるのは明白。
0823nobodyさん02/04/21 18:20ID:???
>>822
ワラタヨ
0824nobodyさん02/04/21 18:23ID:???
>>820
ギコタク作者は?
0825nobodyさん02/04/21 18:36ID:???
>>824
全然詳しくないと思う
0826nobodyさん02/04/21 18:38ID:???
>>825
なんで?
0827nobodyさん02/04/21 18:46ID:???
>>826
Tk部分は_gunzipさんがほとんど作ってたじゃん
0828nobodyさん02/04/21 18:47ID:???
Jarlの作者は確実にPerl/Tkに詳しいな。
http://jarl.sourceforge.net/
まぁ825が一番バカなわけだが。
082946902/04/21 18:48ID:???
ギコタク作者 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _gunzip
083046902/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_gunzip02/04/21 20:05ID:???
>>565
いろいろ指摘ありがとうございます。
素直に$_[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名無しさん@edlin02/04/21 20:25ID:???
>>831
もちろん1
0834nobodyさん02/04/21 21:29ID:???
>>831
4、かな。
0835nobodyさん02/04/21 21:44ID:???
>>831
細かいが
if ($string eq 'hoge') {
「"」より「'」の方が変数置換無い分だけ早そうな気がするが、嘘かも。
0836nobodyさん02/04/21 22:29ID:???
コンパイル時に判別できるので変わらない。
0837nobodyさん02/04/21 22:51ID:???
そのコンパイルがちびっと早いかな...と
0838nobodyさん02/04/21 23:35ID:IQt5Pbmu
>>835-837
CGI 用にコンパイル無し、インタプリタとして動かしてるなら効果ある?
0839名無しさん@edlin02/04/21 23:47ID:???
>>838
それはちょっと勘違いしている。
通常のインタプリタとして実行する時も、中間コードにコンパイル
され、実行されるんだけど、その「コンパイル」を指してるんだよ。
0840nobodyさん02/04/21 23:49ID:???
>>839
あぁ…そう言う事か。混乱してた
とうい事は、変数置換があり得ない文字列はリテラルにした方がいいのか…
084183702/04/22 00:04ID:???
>>840 自分で書いといてなんだが、おそらく効果は無い(測定不可能なレベル)。
気分の問題。(w
0842nobodyさん02/04/22 04:49ID:5JDbu1pP
金額を3ケタごとに「,」で区切りたいんですが、
どのようにすればいいのでしょう。

sprintf(); で簡単に記述できたと思ったのですが
どうしても見つかりません。

ご存じの方いましたら教えてください。
0843nobodyさん02/04/22 06:05ID:???
sprintf以外の方法なら知っていますが、
sprintfを使った方法が見つからないのでごめんなさい。
0844nobodyさん02/04/22 06:44ID:???
ごめんちゃい
0845nobodyさん02/04/22 09:02ID:???
>842
$_ = reverse join ',', grep !/^$/, split /(\d\d\d)/, reverse $_;
0846nobodyさん02/04/22 09:40ID:???
>>845
クライアント様のご要望で、どこかにsprintfを噛まさないといけないようです。
$d = reverse sprintf "%s", join ',', reverse($d) =~ /\d{1,3}/g;


つーかメモ。
0847nobodyさん02/04/22 11:39ID:???
>>842
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
だそうです。
ちなみに、オレ自身、コレがどういう理屈(仕組み)でうまくいくのか
理解してません。でも、ちゃんと動いてる。うーむ。
084871202/04/22 21:42ID:bQF56S81
>>712の質問に答えてくださった方々、ありがとうございました。
以下の方法でなんとか形にはなりました。

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:???
http://vldb.gsi.go.jp/sokuchi/surveycalc/algorithm/xy2st/xy2st.htm
これをPerlでやる方法はどうすればよいのでしょうか?
ルートのところがよくわからん・・・。
0850nobodyさん02/04/22 22:41ID:???
>>848
そうか、そりゃよかった。

0851nobodyさん02/04/22 22:44ID:???
平方根はsqrt()だが、そんな事が聞きたいわけじゃないよな…。
0852nobodyさん02/04/22 23:39ID:NaATCEmQ
coreファイルの自動削除をperlで行うにはどうすればいいのでしょうか?

この質問、FAQだと思うんですが、FAQをまとめた所が無いし
過去スレにも載ってないようなので、質問しました。
0853Dream 黒星02/04/23 00:36ID:???
>847
g オプションは意味がないから外せ!
でも、もっと速い方法があるが... オマエ等にはそれで十分だ。
0854nobodyさん02/04/23 02:52ID:???
>852
if(coreファイルがあるか?){
unlink(coreファイル);
}

085584702/04/23 03:35ID:???
>>853
オレに言わないでくれ・・・
「/gだけじゃうまくいかないこともあるんだよ」っつー例として
に載ってたので、仕方なくついてんだろうよ。

あんたが本当にもっと速い方法を知ってるのかどうかわからんが、
もうこのスレでオナニーカキコはやめてくれ。頼むよ。
085684202/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:???
while (1)
は分かるんですが、
1 while
はどういう意味なんでしょうか?

低レベルな質問ですいません。
0859nobodyさん02/04/23 20:13ID:???
while(expr){ f() }
f() while expr;

if(expr){ f() }
f() if expr;

foreach (expr){ f() }
f() foreach expr;

0860nobodyさん02/04/23 20:21ID:???
while /pattern/g って無限ループにならないのはなぜですか?
0861nobodyさん02/04/23 20:39ID:???
>860
マッチングのチェックをするポイントが移動するから。
gオプションは「何度も繰り返す」じゃなくて「最初の一回で終了をしない」というものだから。
0862nobodyさん02/04/23 22:03ID:trg6QFfS
$temp{aaa}[0] = 'aaa';
$temp{aaa}[1] = 'bbb';
foreach(0..1){
print;
}
↑の変数は何なのですか?
@temp{aaa} = ('aaa','bbb');
だとダメだし。。。
0863nobodyさん02/04/23 22:08ID:???
>>862
(´-`).。oO(何をしたいのか書いてない…こういうバカばっかりで教える気にもならん…)
0864nobodyさん02/04/23 23:11ID:???
>862
ハッシュに配列リファレンスが入ってるのではないでしょうか。
0865(´-`).。oO(もれそう…) 02/04/23 23:15ID:???
$temp{aaa} = ['aaa', 'bbb'];
print "$temp{aaa}[$_]\n" foreach (0..$#{$temp{aaa}});
0866nobodyさん02/04/23 23:51ID:???
>>864-865
こんなの出来ないのか?と思ってやったらずばりできたので
質問させてもらいました。
ありがとうございました。
>>865
(・∀・)<バカっていったやつが〜〜の起源はこんな感じか?
まさに何をしたいわけでも無いです。
反射的にバカバカいう、かつ自分も〜な人に教えを請うつもりはありません。
■ このスレッドは過去ログ倉庫に格納されています