【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0268nobodyさん
02/12/07 00:19ID:ePZJKayyどうすればいいんでしょう?
10個あったら$hoge[9]まで、とか。
0270nobodyさん
02/12/07 00:49ID:???10要素の配列で$hoge[9]までなら全部じゃん(w
foreach (0..$#hoge-1){
print $hoge[$_];
}
とか。
0271nobodyさん
02/12/07 01:08ID:yEekv6g9http://www36.tok2.com/home/bttl/bttl-pc/
0272yani ◆saNSktNEdQ
02/12/07 01:19ID:KB9hByzAforeach (@list) {
$least ||= $_;
$_ < $least and $least = $_;
}
ベタな気がする。エレガントな解法求む。
0273yani ◆saNSktNEdQ
02/12/07 01:30ID:KB9hByzAmy $least;
foreach (@list) {
defined($least) or ($least = $_, next);
$_ < $least and $least = $_;
}
0274yani ◆saNSktNEdQ
02/12/07 02:26ID:6Rt0AxGbしかしイマイチ美しさを感じないのは気のせいか。
my($least) = @list;
foreach (@list) {
$_ < $least and $least = $_;
}
0275nobodyさん
02/12/07 03:44ID:???0276268
02/12/07 04:11ID:ePZJKayyあ、確かに全部っすね・・・(w スマソ
こういう方法があるんですねぇ。おかげさまでうまくいきました。
ありがとうございます。
0277nobodyさん
02/12/07 06:27ID:???forを使ってないだけで中で回ってるのは一緒だけどな。
0278nobodyさん
02/12/07 06:39ID:???grep { $min > $_ && ( $min = $_ ) } @list;
こんな具合かな。テストしてないけど。
0279nobodyさん
02/12/07 06:44ID:???駄目だ寝よう。
0280yani ◆saNSktNEdQ
02/12/07 09:40ID:6bq1sAwRそうそうgrepがあった。
手元の5.8.0の標準モヂュールで面白いものを見つけた。
use 5.8.0; ###
use List::Util qw(min);
...
$least = min(@list);
0281yani ◆saNSktNEdQ
02/12/07 11:42ID:6bq1sAwRないんだが、「面白い」(ことができるかもしれない)と言ったのは List::Util::reduce のことだ。
0282nobodyさん
02/12/07 11:46ID:???0283nobodyさん
02/12/07 16:22ID:???0284nobodyさん
02/12/07 16:24ID:/TptzaIRエラー表示させる場合「&error("文字列");」を使う例を良く見るのだが、
この場合「sub error{}」は用意しなくて良いのだろうか?
所持する本には書かれていなくて……。
ちなみに漏れは「die」関数を使ってます。
0285nobodyさん
02/12/07 16:58ID:???0286nobodyさん
02/12/07 18:32ID:???0287nobodyさん
02/12/07 20:46ID:???自分でつくるんでねぇ?
>>286
構造化プログラミングとかの本を見ると、GOTO分はプログラムの流れがワープしちまって
全体を把握するのが困難になるからいくないらしい
昭和57年頃の本だけど(藁
0288nobodyさん
02/12/07 21:03ID:???わかっていたら混乱することもないんじゃない?
0289nobodyさん
02/12/07 21:06ID:???自分で好きなの作ろうぜ。>sub error { }
きちんとエラーメッセージ吐いてその時の環境変数やら標準入力の内容やらも表示すれば、
デバッグに便利。
0290nobodyさん
02/12/07 21:54ID:HolpJHokSOCKET
WGET
LWP
WGETはサーバに入っていないので。。
LWPよりSOCKETの方が早いと思うんですが。
0292nobodyさん
02/12/07 22:31ID:HolpJHok実際私はこれで毎月30000円稼いでいます、
しかも毎月1000万円が当たるチャンスなどあります。
お小遣い稼ぎに是非!!!
http://www.fruitmail.net/cgi/introduce_jump2.cgi?901913
0293nobodyさん
02/12/07 22:58ID:???Socketの方がなんぼか早いだろうなあ。
でも、それぐらいだったらLwp使って安全かつシンプルに持ってくる方が俺はいいな。
SocketだったらRFCとかきちんと目を通さないと、正しいものは作れないだろ?
0294nobodyさん
02/12/08 10:58ID:H7RlugSZ0295nobodyさん
02/12/08 11:38ID:???「サブルーチン名は、全部小文字の方がいい」だろ?
モジュール名は(プラグマ以外は)大文字で始めろともあるだろう。
それと合わせたんじゃないか? 区別がすぐにつくように。
ま、作法の話だから、あんまり深く考えるな。
従ってれば、いつかきっと自分の中で決着がつく。
0296nobodyさん
02/12/08 11:43ID:???print "ふーん。。。\n";
}
0297nobodyさん
02/12/08 12:07ID:H7RlugSZなるほど、ソースの読みやすさのためなんですね。
モジュールは使ったことがないので今まで気にならなかったんだと思います。
0298nobodyさん
02/12/08 13:10ID:???Perlで、累計・今日・昨日のアクセス数をカウントするカウンターCGI(IMG or JSタグでCGI起動)
を設置しようと思ってるんですが、カウントの方法で少し悩んでます。
count.cgi?total でカウント処理(累計+1, 今日+1)
count.cgi?today で今日のカウントをロードするだけ
count.cgi?yesterday で昨日のカウントをロードするだけ
上の順でCGIが呼ばれると正常にカウントされるんですが、
昨日、今日、累計の順に呼ばれると、当然昨日と今日のデータはカウントされる前のものになっちゃいます。
今日と昨日のCGI が呼ばれたら、sleep(1)をして、累計のカウントがおわるまで待つ
というのも考えたんですが、あまりいい方法じゃないなーなんておもいますた。
また、カウントだけをする count.cgi?count みたいなタグを入れて、
そのタグを一番上に置いて、累計・今日・昨日のタグがきたらカウントデータを読むだけ
ってしても、やっぱり設置場所によってはデータがずれたりしてきちゃいます。
おい、おまえら!もしいい方法がありましたら教えて下さい。
0299nobodyさん
02/12/08 13:37ID:???count.cgi?todayで今日のカウントを+1して今日のカウントを出力
count.cgi?yesterdayで昨日のカウントを出力
で良いべさ。
0301nobodyさん
02/12/08 16:23ID:GWJer8wb&jcode::convert(\$hoge{'hoge'},'euc');
てやってもだめなので一回普通に変数に代入して変換して元に戻して
いるんですが・・・。
0303nobodyさん
02/12/08 23:59ID:???flockの使い方教えてくらはい。とりあえずはflockがサーバで使えるみたいなので。
そんなやつが掲示板など作るな!とかいわれそうですがお願いいたします。
参考になるサイトだけでも結構なんでお願い。
半日ググってたら、何が何やら分からなくなってしまいました。
0304nobodyさん
02/12/09 00:07ID:???ttp://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&as_qdr=all&q=perl+flock+%E4%BE%8B&lr=lang_ja
検索サイトの使い方のコツを覚えた方がいいんじゃないか?
0305nobodyさん
02/12/09 00:21ID:???今まで「perl cgi flock 掲示板」やら「flock 掲示板」やら、
しらみつぶしにサイトを見まくっていたら頭が変になっていました。
「例」で検索するのをすっかり忘れていました。
本当に感謝です。>304
0306nobodyさん
02/12/09 20:40ID:30vqgT1r%ex = (
hoge => "hage",
xxxx => "$ex{hoge}",
);
みたいにしたいのですが、
Global symbol "%ex" requires explicit package name at ファイル名 line 13.
みたいにエラーが出ます。
どうすればいいですか?
よろしくお願いします。
0307nobodyさん
02/12/09 21:00ID:???0308nobodyさん
02/12/09 21:01ID:???0309nobodyさん
02/12/09 21:13ID:???0310nobodyさん
02/12/09 21:14ID:???0311nobodyさん
02/12/09 21:34ID:30vqgT1ruse strict;をコメントアウトしたら、エラーは出なくなりましたが、
$ex{xxx} に $ex{hoge} の値が代入されていませんでした。
実際には、my %ex; です。写し間違えでした。
0312nobodyさん
02/12/09 21:38ID:???0313nobodyさん
02/12/09 21:59ID:???(
hoge => "hage",
xxxx => "$ex{hoge}",
)
が評価される時点で$ex{hoge}に何も入っていないなら当然。
0315nobodyさん
02/12/09 23:42ID:???0316nobodyさん
02/12/09 23:46ID:???0317nobodyさん
02/12/10 00:21ID:???checkboxや、radioのcheckedは、引き継げないんですか?
0318317
02/12/10 00:29ID:???0319nobodyさん
02/12/10 11:20ID:???たとえば、
$count;
$hoge;
foreach $count (1 .. 10){
$hoge$count = "文字:$";
}
こんな感じでつまり、
$hoge1 = "文字:1";
$hoge2 = "文字:2";
〜
$hoge10 = "文字:10";
こういう事はできるのかなという事です。
これだとやはり$hoge$countの書き方がまずいようでエラーになります。
0320nobodyさん
02/12/10 11:27ID:???0321nobodyさん
02/12/10 11:59ID:???推奨:$hoge[$count] # ただし$countが数字の場合のみ
推奨:$hoge{"$count"} # $countが文字列の場合
非推奨:${"hoge$count"}
0323nobodyさん
02/12/10 13:14ID:???0324nobodyさん
02/12/10 13:22ID:???○ 推奨:$hoge[$count] # ただし$countが自然数の場合のみ
負の数とか小数を使われたらたまらんから訂正。
0325nobodyさん
02/12/10 13:26ID:???0326nobodyさん
02/12/10 13:31ID:???0327nobodyさん
02/12/10 14:02ID:+QGYbS02抽出するにはどうすればいいのでしょうか?
例えば『あいうえお』,『Aいうえお』などの場合です。
substrを使うと『Aいうえお』がおかしくなってしまいます
0328nobodyさん
02/12/10 14:10ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Split
0329nobodyさん
02/12/10 14:16ID:???Thanks
0330nobodyさん
02/12/10 15:27ID:???すいません、よく考えたらただの配列じゃダメなんです。
$hogeと$iを合体して、
「$hoge1」という変数自体を作りたいんです。
よって、「$hoge1」という変数に文字とかを代入したりしたんです。
0331nobodyさん
02/12/10 15:46ID:???書き込み処理の所なんですが、
open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
truncate(OUT,0);
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
close(OUT);
と
open(OUT, "+<$dat");
flock(OUT, 2);
@sasa = <OUT>;
seek(OUT, 0, 0);
print OUT "書き込み\n";
print OUT @sasa;
truncate(OUT, tell(OUT));
close(OUT);
ではどちらがいいんでしょうか?
ただtruncateの使い方がちょっと違うだけなんですが・・・。
それ以前に文法的に間違っていたらご指摘お願いします。
0334nobodyさん
02/12/10 16:11ID:???>332さんごめんなさい。
0335nobodyさん
02/12/10 16:17ID:???せめて、配列じゃなくって$hoge1という変数が欲しい
理由を書いてもらえませんか? もしかするとその原因
自体変更することで、全体としてすっきりするっていう
可能性もありますから。
0336nobodyさん
02/12/10 19:01ID:4NsDPNiK作ろうとしてるのは、パスワードを作るだけのスクリプトと、そのパス
を使って管理する掲示板なんだけど・・・文法チェッカかけたら
「Missing right curly or square bracket at hoge.cgi line 65, at end of line
syntax error at hoge.cgi line 65, at EOF
hoge.cgi had compilation errors.
」
ってなってしまった。。。
0337336
02/12/10 19:02ID:4NsDPNiK0338nobodyさん
02/12/10 19:04ID:???メールの受信をしたいので、下記のように記述したのですが
0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2 print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->login($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9 print "認証: NG \n";
10 }
どうしても、認証NGとなってしまいます。
POPサーバーには、Win2000 exchangeを使用しているため
ログインユーザー名に、「ドメイン\\ユーザー名」と記述したり、
しなかったり、と色々試してみたのですがダメでした。
ちなみに、モジュールが置いてあるマシンからPOPサーバーへの
pingは通りました。
どなたか、分かる範囲で構いませんので
ご指摘下さい。
0340336
02/12/10 19:06ID:4NsDPNiK暗号化して、それをファイルに保存(ファイルを作成というコマンド
がない?ので、ロックファイル作成のコードを使ってます)、というもの。
エラーが出ている65行目は。。。
sub error {
&head;
print <<"ERR"; #ここが65行目。
<center>
<hr>
<font color="#C20000"><b>エラー</b></font><hr>
$_[0]
<hr>
</body>
</html>
ERR
}
何が違うんでしょう??
0341336
02/12/10 19:07ID:4NsDPNiKカッコ?!
・・・見てみます。
0343nobodyさん
02/12/10 19:17ID:???0345338
02/12/10 21:05ID:???とりあえずもう一度、修正版を書いておきます。
0 use Net::POP3;
1 unless ($pop = Net::POP3->new("$HOST")) {
2 print "POP3接続失敗 \n";
4 }
5 $pop->user($LOGIN_NAME);
6 $auth_check = $pop->pass($LOGIN_PASS);
7 if( $auth_check == undef )
8 {
9 print "認証: NG \n";
10 }
0346nobodyさん
02/12/10 21:24ID:???0347nobodyさん
02/12/10 21:51ID:???@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");
@hoge{1}=@test;
$data=@hoge[0];
このようにすると$dataの中には「か」だけが格納されてしまうのですが。
0349347
02/12/10 21:53ID:???正 $data=@hoge[1];
0350nobodyさん
02/12/10 21:56ID:???0352nobodyさん
02/12/10 23:43ID:???@test=("か","き","く","け","こ");
@hoge=("あいうえお","テスト","さしすせそ","たちつてと","");
$hoge[1] = \@test;
print $hoge[1]->[5];
print $hoge[1][3];
print @{$hoge[1]}
0353nobodyさん
02/12/11 00:22ID:???open(FILE,"xxxx");
@file = <FILE>;
@file = @file[0..8];
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);
このように添字を使って”xxxx”の記録数を10にしたんだけど、
これはかなりダサイやり方?
0354nobodyさん
02/12/11 01:45ID:fCm39Cv9モードは"+>"だよね。そのコードからすると。
@file = ();
push @file, scalar <IN> for 0..8;
のほうがいいと思うよ。
0355nobodyさん
02/12/11 11:59ID:IDueDvlEこちらのスレに対策知ってる神はいらっしゃる?
0356nobodyさん
02/12/11 12:50ID:???$sql = "insert into *** values( '***' )";
$statement = $dbHandle->prepare( $sql );
$sqlResult = $statement->execute;
この$sqlResultには何が返ってくるのでしょうか。
見たんですけど何も入っていませんでした。
0357nobodyさん
02/12/11 13:21ID:mexeU5Q0しても
timelocalが使えません。
助けてください。
0358nobodyさん
02/12/11 13:25ID:???実はPerl4ってことはないか?(w
ところでどう使えないんだ?エラーが出るのか?値が不正なのか?
良ければここにソースを書いてみれ。
0359nobodyさん
02/12/11 13:25ID:mexeU5Q0のことは忘れてください。。。
0360nobodyさん
02/12/11 14:40ID:???Firebirdかなんか知らんが、つまりはDBIだしょ?
$sqlResult = $statement->execute();
で、処理した件数が返ってくるはずだが・・・
0361nobodyさん
02/12/11 15:55ID:3BdsDO3lコマンド「chmod」の代わりになるコマンドってあるんですか?
もしあるのであれば教えてください。
もしくは
$ImgFile = "$ImgDir$no$tail";
if (!open(OUT,"> $ImgFile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }
}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);
chmod (0666,$ImgFile);
この部分をchmodを使わずに構成する事はできませんか?
>>1で指定された書き方が出来そうにないのでこういう形でお聞きします。
どなたかお願いします。
0362nobodyさん
02/12/11 16:10ID:???open(OUT, "> $ImgFile")より上に umask 0;
0363nobodyさん
02/12/11 16:22ID:IDueDvlEいえ、Perl4なんてことはないっす。w
前はActivePerl5.6.1ビルド633でGDBM_FileをPPMインスコした記憶があって、
今回ActivePerl5.8.0ビルド804にする際以前の5.6.1ビルド633は綺麗さっぱり
DISKから消してしまったんです。GDBM_Fileは後からインスコすればいいという
考えで。
そしていざGDBM_Fileのインスコしようと思ったら、Perl5.6用しか見つからなくってお口あんぐり状態な訳です。
エラーは
Can't locate GDBM_File.pm in @INC (@INC contains: C:/perl/lib C:/perl/site/lib .) at (eval 1) line 2. BEGIN failed--compilation aborted at (eval 1) line 2.
と、漏れのマシンにGDBM_Fileが装備されてないって出ます。
ソースの抜粋は。。。自分が作ったスクリプトじゃない配布物なんで、カキコするのもちと・・・。
動作は電話帳データベースのようなもので、電話番号を入力すれば住所が分るといったものと同等です。
暫く待てばPerl5.8(Windows)用のGDBM_Fileが出てくるのかな?
0364nobodyさん
02/12/11 16:44ID:???chmodの行を削って
open(OUT, "> $ImgFile")より上に umask 0;
という事でよろしいですか?
ありがとうございました。
0365nobodyさん
02/12/11 17:50ID:???require './jcode.pl'; # jcode.plのパス
をしてjcode.plを呼んでるんですけど、コマンドラインで
「C:\>perl "C:\Documents and Settings\***\デスクトップ\unko.cgi"」
を実行すると、
「Can't locate ./jcode.pl at C:\Documents and Settings\***\デスクトップ\unko.cgi line 17.」
と出てしまいます。
(webだとエラーになりません。ローカルではデスクトップでスクリプトを実行しています。)
なぜでしょうか。
0366nobodyさん
02/12/11 18:14ID:???require '.\jcode.pl';
0367nobodyさん
02/12/11 19:35ID:???カレントディレクトリに jcode.pl がないんでしょ。
そのコマンドラインだと、カレントは C:\ で、スクリプトのある場所と違ってるし。
■ このスレッドは過去ログ倉庫に格納されています