トップページ⇒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を見よう。
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
(・∀・)<バカっていったやつが〜〜の起源はこんな感じか?
まさに何をしたいわけでも無いです。
反射的にバカバカいう、かつ自分も〜な人に教えを請うつもりはありません。
0867nobodyさん02/04/23 23:54ID:???
>866
とりあえずレス番間違いを修正しとけ。
そんな間違いして気付かずに入るとバカと言われても否定できなくなるぞ。
0868nobodyさん02/04/23 23:55ID:???
>867 =~ s/気付かずに入ると/気付かずにいると/;
漏れがバカでした、逝ってきます。
086986602/04/23 23:59ID:???
>>865→>>863です。。。
すいません。
漏れもバカでした、逝ってきます。
0870nobodyさん02/04/24 00:04ID:???
オモロイぞ>>868-869
0871nobodyさん02/04/24 03:02ID:???
アホばっかりですねこのスレ
やだやだ
0872nobodyさん02/04/24 07:22ID:???
アホばっかりです。ねこのスレ。
やだやだ
0873nobodyさん02/04/24 17:40ID:QCOQFZww
板違いにより、レンタルサーバー板より移動してきました。m(__)m

windows2000にてAn httpd(1.39f)を使ってCGIの動作実験を行っているのですが、
Cookieを受け入れてもらうためにPerlで

print "Set-Cookie: data=Yes; expires=Sat,05-Mar-2005 00:00:00 GMT\n";
print "Content-type:text/html\n\n";
(以下html文書が続く)

のように記述したのですが、IE5.0、IE5.5に無視されてしまいます。
(NC6.xでは問題なく受信してくれます)
原因のわかる方はいらっしゃいますでしょうか?
0874nobodyさん02/04/24 17:46ID:???
>>873

CGIだけど、なんか質問ある? part 6
http://pc.2ch.net/test/read.cgi/php/1019561283/
0875反抗期02/04/24 18:40ID:/vYDcPy6
お母さん質問です

$backupFile = ">C:\\Inetpub\\wwwroot\\backup\\backup.txt";
sub backupmake {
(open OUT,$backupFile);
print OUT "$nowtime $name $email \n";
close( OUT );
}

このように記述すると
backup.txtにデータ自体はきちんとが入るのですが
前のデータが消えてしまいます。
上書きせずにデータを入れて行くにはどうすれば良いですか?

ちなみに
sub backupmake {
(open OUT,">>$backupFile");
print OUT "$nowtime $name $email \n";
close( OUT );
}

とやってみたのですが、これではbackup.txtに記述されませんでした
0876nobodyさん02/04/24 18:47ID:???
>>875
おしいね。追記したいなら
open(OUT,">$backupFile");
じゃない?($backupFileの1文字目が「>」なので)
0877反抗期02/04/24 18:52ID:/vYDcPy6
キタ━━━━━━(゚∀゚)━━━━━━ !!!

>>876
お母さんありがとう!
0878 02/04/24 18:54ID:ST7JH4TO
はじめまして。
質問させてください。
よく、掲示板の機能で、出身地をリストから選んで
入力できたり、アイコンをリストから選んで入力できたり
するけど、ああいうのをカスタマイズ(例えば、
出身地じゃなくて、血液型を入力できたり)
したいのですがそういう説明のあるサイトとかありますか?
それとも簡単なことですか?
0879nobodyさん02/04/24 19:18ID:???
>>878
うん。簡単。
0880nobodyさん02/04/24 19:27ID:???
<option>出身地A</option>
<option>出身地B</option>
・
・
↓
<option>A型</option>
<option>B型</option>
・
・
088187802/04/24 19:29ID:ST7JH4TO
>>879
もし、あなたに頼むならいくらでやってくれますか?
一箇所だけです。
出身地を血液型に入れ替えるだけです。
0882873です。02/04/24 19:50ID:47ftV//x
うんこが漏れました。くすん。
0883nobodyさん02/04/24 21:20ID:???
>>881
スクリプト改造工房
http://pc.2ch.net/test/read.cgi/php/1012839651/

既存のスクリプトの改造してほしいんだったらこのスレにどーぞ
改造依頼するときは 1 の注意書きよく読んでね
088487802/04/24 21:56ID:???
>>881
税込み105円で。
088584402/04/24 21:57ID:???
>>884
878->879
0886nobodyさん02/04/25 17:07ID:eszjGBC/
perlをいれてないんだけど、スクリプト作れるよね?メモちょーだけで
0887nobodyさん02/04/25 18:46ID:???
作れるよ。でもperl入れなきゃテストする環境がないんじゃない?
0888pear ◆PeArra/s 02/04/25 19:54ID:Va/Pba3y
KENT-WEBのPETIT BOARDを改造したのですが、動作しません。
症状は、最初の画面は出るんですけど、
ローカルでテスト書き込みをすると、500エラーを吐いてしまいます。
ソースは↓にアップしました。
http://www.geocities.co.jp/Playtown-Knight/7767/petit.txt

よいアドバイスお待ちしています、よろしくお願いします。
0889nobodyさん02/04/25 20:03ID:???
>888
なにをどう改造したか説明しる。
そして>883に逝く。
0890nobodyさん02/04/25 20:03ID:???
>>888
重要なのはエラーコード(500)ではなく、エラーログだ!
エラーログよこせ。
0891nobodyさん02/04/25 20:05ID:UbehO4w6
もしスレ違いだったらごめんなさい。
HPの掲示板が荒らされまくって困っています。
書き込んでいる人間のIPアドレスを知る方法がわかる方がいらっしゃったら
教えていただけないでしょうか?
もしくは書き込み不能にできる手段はありますでしょうか?
されるがままで困ってます。
よろしくお願いします。
0892nobodyさん02/04/25 20:40ID:???
>891
明らかにスレ違いだが。
IPを取るのは簡単。
書き込み不能にするのも簡単。
だがしかしIPアドレスなんてのはいくらでも変えられるからあまり意味がない可能性が高い。
その掲示板は閉鎖して、身内にはメールを送り隠れ掲示板を置くのが建設的。
0893rootvg02/04/25 22:13ID:J89k1oOV
http://www.sunseagull.com/join.htm?from=freespace.jp

送信ログを抜きたいのですが。。。。。。。
0894nobodyさん02/04/25 22:15ID:???
もういいから帰ってください
089589102/04/25 22:28ID:UbehO4w6
>892
御親切な書き込みありがとうございました。
当方、本当に初心者で別の板でこちらを紹介していただいたのですが、
ここもスレ違いだったんですね、すいません。

>IPを取るのは簡単。
>書き込み不能にするのも簡単。

もし、お手間でなければ教えていただけないでしょうか?
もしくは詳しいサイト(板?)を教えていただけると助かります。
よろしくお願いいたします。
0896nobodyさん02/04/25 22:59ID:???
>>895
$remote_ip = $ENV{'REMOTE_ADDR'};
$remote_hostname = $ENV{'REMOTE_HOST'}

if ($remote_ip =~ /^10\.1/ || $remote_hostname =~ /hoge\.com$/) {
  print "Fuck So Reena!<BR>\n";
  exit;
}
■ このスレッドは過去ログ倉庫に格納されています