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

【Perl】初心者コーナーPart11

レス数が900を超えています。1000を超えると表示できなくなるよ。
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を見よう。
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;
}
0897nobodyさん02/04/25 23:02ID:T2XLP+gT
こんにちは。
先日、CGI検索エンジン(ヤフーのようなタイプで管理者のみ登録可能)と、一般的にごくごく普通の掲示板の制作を依頼しようとしたら、合わせて20万円と見積もりがきました。
条件としては、「著作権表示なし」ということで、この値段はどうなのでしょうか?
みなさんのご意見をお聞かせください。
また、上記のような物であれば、いくら位が妥当なのでしょうか?
宜しくお願いします。
0898nobodyさん02/04/25 23:26ID:???
>>897
スレ違い
どっか逝け
0899nobodyさん02/04/25 23:27ID:???
>>896
スレと関係ないけど、Fuck So Reena!ってナニ?
はくそりーなへと関係アリ?
0900nobodyさん02/04/26 00:40ID:???
WinXP + ApacheWin32 1.3.24 + ActivePerlで
CGIProxy(ttp://business.millto.net/~quadrant/)を使いたいのですが、どうも動きません。
use Socket; を入れてみても動かないのですが、ソケットを使うには如何すればいいのでしょうか?
どなたかご教授お願いします・・・
090190002/04/26 01:04ID:???
ちなみに、「サーバーが見つかりません」になり、エラーログには何も出力されません
090289602/04/26 02:14ID:???
>>899
そそ。
0903nobodyさん02/04/26 05:34ID:Q56RTaUT
GnuPGを、perlスクリプトから動かそうと思い、system関数を使えば
いけそうなのはわかったのんですが、どうにもうまく動きません。

/usr/local/bin/gpg -ea -r D44EC5AA aaaa -o bbbb

telnetでログインし、上記コマンドを打って、
bbbbファイルが暗号化されるのは確認しました。

単にこのコマンドをperlスクリプトから打ちたいだけなのですが、
これをsystem関数でやるには、どのような書き方をすればいいのでしょうか?
初歩的な事ですみません、検索してもよくわからなかったのでお願いいたします。
0904pear ◆PeArra/s 02/04/26 07:00ID:???
>>889-90
ごめんなさい、改造中に誤って1行消してしまったみたいで…
今は正常に動作しています、迷惑かけてしまってすいません。
>>897
業者に依頼するなら妥当だと思う
0905アリソン02/04/26 08:13ID:???
ディレクトリの中の特定のファイル名を持つものを
削除したいんですが例えば
april1.html
april2.html
april3.html
april4.html
と言うファイルがある場合
aprilの後3以下の数字ならそのhtmlファイルを削除する場合
ってのはどうすればよろしいんでしょうか?検索してもわかりませんでした。
教えてください。
0906nobodyさん02/04/26 08:26ID:???
試してないので注意。
使用する前にまずunlinkをコメントアウトしてprint文で正しい
ファイルが選ばれてるかどうかテストしておいたほうがよろしいかと。

use IO::Dir;
my $dh = IO::Dir->new( "/path/to/dir" ) || die $!;
while( $dh->read ) {
next if !/^april(\d+)\.html$/;
next if $1 >= 3;

## print "deleting $_\n";
unlink($_);
}
0907nobodyさん02/04/26 08:45ID:???
>>905
system('rm april*.html');
0908nobodyさん02/04/26 10:42ID:???
unlink('april1.html');
unlink('april2.html');
unlink('april3.html');
0909nobodyさん02/04/26 10:53ID:qDk2ux2I
@_ ってなんですか?
レス数が900を超えています。1000を超えると表示できなくなるよ。