【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あたりを見よう。
0698nobodyさん
02/12/26 18:04ID:???処理するところは書けたのですが、「一定時刻に」というところでつまづいています。
0699nobodyさん
02/12/26 18:04ID:jnr3kh76sub G{
my $a=shift;
if($a>0){
G($a-1);
print"$a\n";
G($a-1);
}print" \#$a\n";
}
この処理の流れが良く理解できません
アドバイスなどお願いします
0700nobodyさん
02/12/26 18:14ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0703nobodyさん
02/12/26 19:00ID:???ありがちな方法なら、「最後のアクセスと時間帯が違えば処理をする」という方法。
1時間に1回の方法なら、最後にアクセスした時の「時間(11時とか)」を保存しておき、
「前回の時間と違ったら(11時じゃなくなったら)処理をする」などでやる。
ただし、1時間以上アクセスがなかったら困ったりする事もある。
あと、鯖がかなり限られるがcronもある。
これはスレ違いだから自分で検索すれ。
0706nobodyさん
02/12/27 00:12ID:BkvjWsIwmod_perl を入れるために、use strict をしておこうと思ったんですが、
$| = 1;
$ENV{いろんな環境変数};
こういうのも my しないとだめなの?
0708nobodyさん
02/12/27 00:54ID:qm28R9Zoフュージョン料金明細で必須項目をテキストにあらかじめ記入しておいて
それと現在の日時をもとに一発で明細結果がでるようする方法はあるでしょうか?
いちいち項目をコピペするのが面倒なんです。
0709706
02/12/27 01:30ID:BkvjWsIw例えば、
sample.cgi というCGIプログラムがあったとして
use strict;
$| = 1;
require './common.pl';
としていたとしよう。このとき、common.pl にも use strict は書くべきなのか。
それとも、sample.cgi の use strict を引き継いで、
common.pl には、何も書かなくても自動的に use strict されるのか?
0710nobodyさん
02/12/27 01:33ID:???0711699
02/12/27 01:36ID:BtYEwdxr途中からよ〜分かりません
どこで値が保持されどの様に順番に吐き出されるのか?
0712nobodyさん
02/12/27 01:37ID:???パッケージならパッケージ変数になってるし、
use strict; しなくてもそのスクリプト内でしか使わないなら、my とかしとけばいいだけじゃない?
>common.pl には、何も書かなくても自動的に use strict されるのか?
no!
0713nobodyさん
02/12/27 02:31ID:???sub G{
>>699
実行してみて。
これでわかる?
G(3);
sub G{
my $a=shift(@_);
my($space) = "";
for(my($i)=$a; $i<3; $i++){$space .= " ";}
print "$spaceここからG($a){\n";
if($a>0){
G($a-1);
print"$space$a\n";
G($a-1);
}
print"$space\#$a\n";
print "$space}ここまでG($a)\n";
}
0715nobodyさん
02/12/27 10:20ID:???その通り、常に実行ですね
>>703
で出てる様にcronを使う手がありますがユーザーに開放している鯖はかなり少な
いし、perl(スクリプト)での質問でしたので>>701としておきました
笑える手として、webサーバーがあるならhtmlより定期的に呼び出すとかもあるけ
ど、これもスレ違い
0717nobodyさん
02/12/27 20:28ID:pRxcckDoご存知の方がいらっしゃいましたら、是非教えてくださいまそ。
0718nobodyさん
02/12/27 20:35ID:yQoOgQCT0721nobodyさん
02/12/28 01:10ID:???foreach(keys %HASH){
・・・
}
に相当する処理ってできないんでしょうか?
できるのならやり方教えてホスイ。
0723nobodyさん
02/12/28 01:39ID:???for (keys %$ref){
print $_,"\n";
}
0724りゅう
02/12/28 12:37ID:7mOI1Cp3その本に付属していたCDのサンプルをLocalhostに置くと動くんですが、
自分で真似て作ったやつだと、エラーが出てしまいます。何回も見なおしたけど
違いが分かりません。どなたか違っている個所を教えてくれるとありがたいです。
0725りゅう
02/12/28 12:38ID:7mOI1Cp3#!/usr/local/bin/perl
#==========================================================
#メイン処理
#==========================================================
#ヘッダを表示する
&print_header;
#トップを表示する
&print_top;
#==========================================================
#ヘッダの表示
#==========================================================
sub print_header {
print "Content-type: text/html\n\n";
print "<META HTTP-EQUIV=Content-Type CONTENT=\"text/html; CHARSET=Shift_JIS\">";
print "<html>\n";
print "<head><title>Simple BBS</title></head>\n";
print "<body bgcolor=#fffff0 text=#000000 >\n";
}
0726りゅう
02/12/28 12:39ID:7mOI1Cp3# 入力画面の表示
#==========================================================
sub print_top {
print "<center><table width=600><tr><td>\n";
print "<br><br><center><h2>Simple BBS</h2>\n";
print "<hr> [ <a href=http://www.marutora.net>Back To Homepage</a> ] <hr></center>\n";
print "<form method=post action=bbs1.cgi>\n";
print "<input type=hidden size=20 name=action value=regist>\n";
print "<table border=0>\n";
print "<tr><td align=right>名前 :</td><td><input type=text size=20 name=name></td></tr>\n";
print "<tr><td align=right>E-mail:</td><td><input type=text size=40 name=mail></td></tr>\n";
print "<tr><td align=right>URL :</td><td><input type=text size=40 name=url value=http://></td></tr>\n";
print "<tr><td align=right>タイトル:</td><td><input type=text size=40 name=title></td></tr>\n";
print "<tr><td align=right>内容 :</td><td><textarea cols=50 rows=5 name=massage wrap=hard></textarea></td></tr>\n";
print "<tr><td colspan=2 nowrap align=right><input type=submit value=送信> <input type=reset value=書き直し></td></tr></table></form>\n";
print "<hr size=0 align=center>\n";
}
_END_
0727りゅう
02/12/28 12:40ID:7mOI1Cp3#!/usr/local/bin/perl
#=========================================
#メイン処理
#=========================================
#ヘッダを表示する
&print_header;
#トップを表示する
&print_top;
#=========================================
# ヘッダの表示
#=========================================
sub print_header {
print "Content-type: text/html\n\n";
print "<META HTTP-EQUIV=Content-Type CONTENT=\"text/html; CHARSET=Shift_JIS\">";
print "<html>\n";
print "<head><title>Simple BBS</title></head>\n";
print "<body bgcolor=#fffff0 text=#000000 >\n";
}
0728りゅう
02/12/28 12:41ID:7mOI1Cp3# 入力画面の表示
#=========================================
sub print_top {
print "<center><table width=600><tr><td>\n";
print "<br><br><center><h2>Simple BBS</h2>\n";
print "<hr> [ <a href=http://www.marutora.net>Back To Homepage</a> ] <hr></center>\n";
print "<form method=post action=bbs1.cgi>\n";
print "<input type=hidden size=20 name=action value=regist>\n";
print "<table border=0>\n";
print "<tr><td align=right>名前 :</td><td><input type=text size=20 name=name></td></tr>\n";
print "<tr><td align=right>E-mail:</td><td><input type=text size=40 name=mail></td></tr>\n";
print "<tr><td align=right>URL :</td><td><input type=text size=40 name=url value=http://></td></tr>\n";
print "<tr><td align=right>タイトル:</td><td><input type=text size=40 name=title></td></tr>\n";
print "<tr><td align=right>内容 :</td><td><textarea cols=50 rows=5 name=message wrap=hard></textarea></td></tr>\n";
print "<tr><td colspan=2 nowrap align=right><input type=submit value=送信> <input type=reset value=書き直し></td></tr></table></form>\n";
print "<hr size=0 align=center>\n";
}
_END_
0729nobodyさん
02/12/28 13:15ID:???本と自分で打ったのを一行ごとに交互に並べ替えて見比べろ。
0730nobodyさん
02/12/28 13:19ID:???どの段階でどういうエラーが出たのかな?
ちなみに単純に違いと言えば最後から3行目のnameが
「message」<=>「massage」
0733nobodyさん
02/12/28 13:54ID:aT8fBpaXエラーメッセージ貼れ。
0734nobodyさん
02/12/28 13:59ID:???とも思ったけど「何回も見なおしたけど」辺りが自分とかぶってつい(汗
しかもタイプミスって辺りが尚更かぶってしまた(激汗
しかし参考書もどうかと、完全にトラップでし>massage
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/
0736nobodyさん
02/12/28 17:51ID:???0737nobodyさん
02/12/28 19:10ID:tgcla43Lhttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
↑現在、配布を中止しているようなのですが、なにかご存じの方、よろしくお願いします。
あ、よく知らないのですがimgboardはPerlではないかも・・・
0739737
02/12/28 19:20ID:tgcla43L0740nobodyさん
02/12/28 19:52ID:???オチだろうな。
>>724
あんたの作ったやつ、うちのローカル環境で正常に動いたぞ。
0742nobodyさん
02/12/28 19:57ID:???0745nobodyさん
02/12/29 02:36ID:9gTPrGHJこんな感じに置換したいのですが、どのようにすれば良いでしょうか?
例えば、これの逆なら、
for ($i = 99; $i >= 1; $i--)
{
$text =~ s/(<){$i}/$i/g;
}
という感じにすれば良さそうなのですが・・・
for ($i = 99; $i >= 1; $i--)
{
$text =~ s/$i/(<){$i}/g;
}
こう書くことができれば、いちばん早いんですが・・・
0746nobodyさん
02/12/29 02:44ID:VsdGeM22$text=~s/(\d+)/"<"x$1/ge;
不具合がなくもないが。
0747nobodyさん
02/12/29 03:06ID:9gTPrGHJありがとうございました!
ちなみに勉強不足で "\d+" が何を表しているのか分からなかったりするので、それを調べてから試してみます ^^;
0748745 = 747 = 748
02/12/29 03:08ID:9gTPrGHJ0749nobodyさん
02/12/29 10:13ID:???0750nobodyさん
02/12/29 13:11ID:apFJB7sHの状態で
$hoge の一番後ろに hageと言うのを足す時は
$hoge = $hoge."hage";
とやるしかないのでしょうか?
$hoge .= "hoge";
0753nobodyさん
02/12/29 16:14ID:???それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
0754nobodyさん
02/12/29 16:18ID:???それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
Perlでブラウザゲームを作りたいです。
それで、勉強って一体何すればいいんでしょ?
とりあえず本読んでBBSの構造くらいは分かるようになりました。
公開されてるゲームのプログラムとか読み漁ればいいのですか?
0758nobody
02/12/30 14:19ID:???WinXP 上でActivePerl を使用しています。
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
何故か do ループの中で last を使用するとエラーになります。
do {
last;
} while (1);
>Can't "last" outside a loop block
while (1) {
last;
}
では問題ありません。last はdo ループの中では使用できないのでしょうか?
last ラベル;
としてもエラーになってしまう…。
0759nobodyさん
02/12/30 14:21ID:???doループの意味わかってる?
ループの前にdo部分をやるから、その時点ではループになってないぞ。
0760nobody
02/12/30 14:29ID:???if (1) { ほげほげ; }
と
ほげほげ if (1);
の違いみたいな物でしょうか…ちがうかな(苦笑
do ループの中ではlast 文は使えないのかな。
勉強していたサイトの1つの中に
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k02.htm
do ループの中でlast 使用できるような所がありますけれど…残念。
レスありがとうございます。
0761nobodyさん
02/12/30 14:55ID:???whileなどでループ修飾してもループブロックではない。
漏れはPerlはインタプリタ系、スクリプト系だからと妥協してる。
構造化BASICで出来るのもあるし、そのうち対応してくれるとうれしいYO
0762nobodyさん
02/12/30 20:31ID:8PVwYuQF0763nobodyさん
02/12/30 21:28ID:neFLd3GGLOOP:
{
do {
last LOOP;
}
}
0764nobodyさん
02/12/30 21:29ID:neFLd3GG0765nobodyさん
02/12/30 21:32ID:neFLd3GG{
my $static;
sub hoge {
$static++;
return $static;
}
}
0766nobodyさん
02/12/30 21:35ID:neFLd3GGwhileも抜けてた。。
0768カミ
02/12/31 04:26ID:eTxvyq7ouse strict;
$aaaa::val = "Global" ;
↑この記法の変数がGlobal変数として扱われる。
0769カミ
02/12/31 05:05ID:eTxvyq7o$test =<<"TEST";
ここから始まりです。
<FOO>
hogehogehoge
hogehogehoge
hogehogehoge
</FOO>
ここで終わりです。
TEST
という文字列から<HOGE>から</HOGE>までを抜き出したい場合。
Perlでどんな風にかきゃいいんでしょう?
------------------------------
<FOO>から</FOO>の間違いだね。
@picup=();
for (split("\n",$test)){
push (@picup) if /<FOO>/ .. /<\/FOO>/ ;
}
for $ol (@picup) {
print $ol."\n";
}
perl1行野郎参照
ttp://www13.cds.ne.jp/~ohsaru/perl/oneline.html
0770カミ
02/12/31 05:18ID:???push (@picup) if /<FOO>/ .. /<\/FOO>/ ;
↓
push (@picup,$_) if /<FOO>/ .. /<\/FOO>/ ;
0771カミ
02/12/31 06:16ID:???某所のコードをモディファイして作成:try.pl
#try , throw ,catch の定義
sub try( &$ ) {
my( $tryb, $catchb ) = @_;
eval { &$tryb };
if ( $@ ) {
local $_ = $@;
&$catchb;
}
}
sub throw {
die $_[0] ;
}
sub catch ( & ) {
shift;
}
print "Throw cath Start\n";
try {
if ($ARGV[0]=~/Exp1/) { throw "Excep1"; }
elsif ($ARGV[0]=~/Exp2/) { throw "Excep2"; }
print "Not throw\n";
}
catch {
/Excep1/ && do { print "catch1:$_\n";};
/Excep2/ && do { print "catch2:$_\n";};
};
0772カミ
02/12/31 06:19ID:???これは思いの他思い通り動きましたが、、
sub try ( &$ ) の&$と
sub catch ( & ) の& の意味が分かりません。
0773nobodyさん
02/12/31 09:04ID:???↓
0774nobodyさん
02/12/31 09:06ID:???mhile($i = 1);
print "gohe"
0777nobodyさん
02/12/31 09:20ID:f3dKkAkhperlsubに書いてある。そのままサンプルで出てるよ。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
> 、&は“sub”キーワードや連続したカンマを要求 しないような無名サブルーチンを要求します。
0778nobodyさん
02/12/31 09:31ID:f3dKkAkhAn "&" requires an anonymous sub-
routine, which, if passed as the first argument, does not
require the "sub" keyword or a subsequent comma.
&のところに入るのは、無名関数だけど、1つ目の引数としてとられるなら、
subキーワードや、次の引数と区切るコンマは必要ない。
0779nobodyさん
02/12/31 09:33ID:???&は(“sub”キーワードや連続したカンマを要求 しないような無名サブルーチン)を要求します。
って事じゃないの?subsequentの訳を思いっきり外してる気がするけれど
0780nobodyさん
02/12/31 09:41ID:f3dKkAkh↓実験用
#!/usr/local/bin/perl
sub hoge (&&&) {
print join(':', @_) . "\n";
}
hoge {
}
sub {
},
sub {
};
0781nobodyさん
02/12/31 11:10ID:aM0LcM990782nobodyさん
02/12/31 11:47ID:YVY0+rTm! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
| ̄ ̄ ̄ ̄ ̄|
http://muryou.gasuki.com/mona/
0783カミ
02/12/31 12:01ID:???頂いた内容からその意味コメントしました。この理解で宜しいか?
sub try( &$ ) {
my( $tryb, $catchb ) = @_;#try内のブロック,catch含むブロックを設定(呼び側ではカンマで区切る必要なし)
#共に引数として事前評価されているので実行コードとなっている?
eval { &$tryb };#try内のブロックを実行(dieを判断したいので敢えてeval内で実行)
if ( $@ ) {
local $_ = $@;
&$catchb;#cathブロック実行
}
}
sub throw {
die $_[0] ;
}
sub catch ( & ) {
shift;#catch内のブロックをそのまま実行。左辺の無いshiftは引数をそのまま評価する?
}
print "Throw cath Start\n";
try {
if ($ARGV[0]=~/Exp1/) { throw "Excep1"; }
elsif ($ARGV[0]=~/Exp2/) { throw "Excep2"; }
print "Not throw\n";
}
catch {
/Excep1/ && do { print "catch1:$_\n";};
/Excep2/ && do { print "catch2:$_\n";};
};
0784nobodyさん
02/12/31 12:09ID:f3dKkAkhshift;
}
は、shiftで、引数を一つもってきて、それが最後に評価したものだから、
それを戻り値として返す。っていう意味だね。
sub catch (&) {
return $_[0];
}
と同じ。
結論としては、無名関数のリファレンスが返される。
0785nobodyさん
02/12/31 12:51ID:???ちょっと難しめの本をぱらぱらと読んでみると、
パイプとか、mod_perlとか、よくわからないものばかり。しかも読んでもいまいちぴんとこない。
脱初心者のためにみなさんはどのような事をされましたかっ!?
0786nobodyさん
02/12/31 12:55ID:???大げさなことしなきゃ入門書程度の知識で掲示板くらいは組めるからなぁ。
mod_系はlinuxの勉強してたときに覚えた。パイプはDOSの時名前だけ聞いて
これまたlinuxで本格的に使い始めた。
0787カミ
02/12/31 14:19ID:???てことは、実際ctach内のブロックはsub catch内で実行されるのでなく
sub try の&$catchb;にて戻ったレファレンスが実行されると考えればいいのだね。
PS
ところでmod_perって何?
0788nobodyさん
02/12/31 14:37ID:???0789nobodyさん
02/12/31 14:51ID:???検索すれ。
0791nobodyさん
02/12/31 15:12ID:TZQCX2rE0794791
02/12/31 15:25ID:???for (1..10){
last if(FTP先の削除したいファイルが削除できたら)
削除処理
}
のような形にしたいんです。
ホウホウワカリマスデスカ?
0796791
02/12/31 15:33ID:???1. FTPで指定されたホストにログイン
2. ディレクトリィの移動
3. ファイルを削除するまで削除処理を実行する
4. 削除完了後にログアウト
この一連の処理を行いたいです。
■ このスレッドは過去ログ倉庫に格納されています