トップページ⇒php
1001コメント331KB

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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あたりを見よう。
0628nobodyさん02/12/22 18:11ID:???
perl 画像 連結
てキーワードで検索かけよう。
とほほさんのgifcat.pl使うと簡単
0629りゅう02/12/22 18:42ID:9RnyP9Mx
>>627
>>628

ありがとう!
0630nobodyさん02/12/22 19:57ID:???
windows環境でPerlを勉強しています。
本にあったサンプルを記述して動かしてみたのですが、
何も表示されません。シンタックスエラーはないですし、
記述ミスもなさそうなのですが、windows環境では
走らないのでしょうか。

<目指す結果>
[ABCABC]
[WindowWindow]

<ソース>
while (<DATA>) {
chomp;
/ (\w{3}) (\w{3}) / && ($1 eq $2) && print "[$&]\n";
/ (\w{6}) (\w{6}) / && ($1 eq $2) && print "[$&]\n";
}

__END__
ABCABCDEFG
X-WindowWindows
0631nobodyさん02/12/22 19:58ID:???
ActivePerl
HTTP-Lite
Time-HiRes
のインストール法がよくわからないんですけど
誰か教えてもらえませんか?
0632nobodyさん02/12/22 20:03ID:???
>>630
/(\w{3})(\w{3})/ && ($1 eq $2) && print "[$&]\n";
/(\w{6})(\w{6})/ && ($1 eq $2) && print "[$&]\n";

でしょ。/ /の中の空白には意味があるよ。
0633nobodyさん02/12/22 20:09ID:???
>632
あああああ、本当だ…。
もしあのままの記述だと、空白がないとマッチしないという事に
なるのですね。なるほど。
レスありがとうございます。とても勉強になりました。
0634nobodyさん02/12/22 20:30ID:???
>>631
http://pc.2ch.net/test/read.cgi/php/1032704121/917 マルチ
0635nobodyさん02/12/22 21:55ID:ICjO1mQt
system,execで実行したプロセスのプロセスIDを得ることは出来ますか?
kill INT => $pid;したいんですが。
0636yumi02/12/22 23:28ID:???
http://www5e.biglobe.ne.jp/~nanko-m/index.htm
0637nobodyさん02/12/23 00:08ID:???
>>635
systemは無理だろう。execならpidは代わらないからexecする前にpid取っとけ。
つーか、普通execする前にforkしたときに親の方で取っとく。
0638nobodyさん02/12/23 00:36ID:3vP0jNwS
スレッド型掲示板をFLASHでやりたいと思います。
「ActionScript+CGIプログラミング」(ソフト バンク)ではスレッド
を立てられないのですが、少なくともデザインだけはオリジナルに
したいです。どこかにいい資料はないでしょうか?
0639nobodyさん02/12/23 01:21ID:cOyl9Q7w
@compressedをgzipに渡して解凍させ、結果を受け取りたいのですが
どうもうまくいきません。

open GZIP, "| /usr/bin/gzip -d";
print GZIP @compressed;

こんな感じで実行してみましたが
結果が標準出力に出力されて、受け取れないです。
どうしたらいいですか?
0640nobodyさん02/12/23 01:27ID:???
open GZIP, "| /usr/bin/gzip -d >file";
0641nobodyさん02/12/23 01:38ID:cOyl9Q7w
>>640
レスありがとうございます。
なるほど、ファイルを経由させれば簡単ですね。
ですが、ファイルを経由しないで、解凍結果を受け取りたいのです。

@compress -> gzip -> file
file -> gzip @decompress
これは分かるのですが

@compress -> gzip -> @decompress
このように処理したいのです。もう一つお願いします。
064264002/12/23 02:06ID:???
うーん、調べたけどできないんじゃない?

パイプ "|" を使うと内部でフォークされて子プロセスの標準出力へ吐き出される

っぽい。。。
0643nobodyさん02/12/23 02:12ID:cOyl9Q7w
わざわざ、調べていただきありがとうございました。
0644(  _。。)_ バタ。 ◆eJlUd9keO2 02/12/23 10:28ID:???

単純な「フォームから送られてきたGETデータ」で躓いてます。

<FORM METHOD="GET" ACTION="ans_check.cgi" TARGET="main_disp">
<INPUT TYPE="HIDDEN" NAME="question" VALUE="001">
Ans. <INPUT TYPE="TEXT" NAME="ans">番
<INPUT TYPE="HIDDEN" NAME="dummy" VALUE="ABCDEFGHIJKLMN">
<INPUT TYPE="SUBMIT" VALUE="プレゼント開封">
</FORM>

とした時(Ansには1234と記入・・・) $ENV{'QUERY_STRING'}の中身が

question=001&ans=1234&dummy=ABCDEFGHIJKLM

と、末尾1文字(たまに2文字)抜けてる時点でなんかヤバそうなのですが、さらに
このデータに対して
@buff = split(/&/, $ENV{'QUERY_STRING'});
とした際のbuffの中身が

buff[0] = 'question=00'
buff[1] = 'and=123'
buff[2] = 'dummy=ABCDEFGHIJKL'

とさらに末尾が1文字消えてしまっているのです……。
可能性…何が考えられるでしょうか? お力添えお願い致します。
0645(  _。。)_ バタ。 ◆eJlUd9keO2 02/12/23 10:34ID:???
追記:
さらに buff を = で split すると・・・

($key,$val) = split(/=/); の結果
$key='questio' $val='00'
$key='an' $val='123'
$key='dumm' $val='ABCDEFGHIJKL'

と今度は分割の先頭($key)が一文字抜ける……ワケわかりません。 T−T
0646nobodyさん02/12/23 10:41ID:???
>644-645
ソースを示せ。
まずはそれからだ。

どうせchopかchompを入れちまってるだけだろう。
0647nobodyさん02/12/23 11:05ID:???
>>641
#!/usr/bin/perl
$pid = open P, '-|';
die unless(defined($pid));
if ($pid) {
このブロックで受け取る
while (<P>) {
print;
}
} else {
close P;
my $pid2 = open GZIP, '|-';
die unless(defined($pid));
if ($pid2) {
このブロックで書く
print GZIP <STDIN>;
} else {
exec 'gzip', '-d';
}
}

if ($pid) {
} else {
このブロックは
close P;
open GZIP, 'gzip -d' || die;
print GZIP <STDIN>;
でもよい。
}
0648(  _。。)_ バタ。 ◆eJlUd9keO2 02/12/23 11:12ID:???
>>646
Σ(゜д゜ ) PHPとちがって末尾1文字なんでも消すのかッ > chop
ごめん、私が悪かった。 せっかくの休みなのにマヂでごめん。
0649nobodyさん02/12/23 11:46ID:???
>>648
変数の扱いや、動作、振る舞いなど微妙に違うので幼虫居。
同じ漢字なのに、でんでん違う日本語と中国語みたいだから(w
0650nobodyさん02/12/23 12:21ID:???
>>648
chompなら大丈夫でないか?
0651nobodyさん02/12/23 13:42ID:???
あほな質問かもしれませんが、
『=>』
これってどういう動作をする物なんでしょうか?
宜しければ教えて下さい。お願いします。
0652nobodyさん02/12/23 13:46ID:???
↓
0653nobodyさん02/12/23 14:14ID:???
p "10" #=>"10"
p 10 #=>10
print("こんにちは") #=>こんにちは
0654nobodyさん02/12/23 15:27ID:UoY7N20E
=>は,と同じ。見かけが違うだけ
0655nobodyさん02/12/23 16:01ID:???
なるほど=>そうなのか
0656nobodyさん02/12/23 16:19ID:3KeBindS
今カウンタを作ってます。
今までずっとcount.cgiとかでそのままHTMLに数値を出力していたのですが、
<img>タグで呼び出すにはどうするんでしょうか?
count.cgiと呼び出すカウンターの違いはなんなんでしょうか?
どうかご教授お願いします。
0657nobodyさん02/12/23 16:51ID:mDd0PRmu
どっかで答えた気がするが、PHPスレだったかも知れん...
今までのcount.cgiは「文字」を返す。
画像の場合は、<img src="img_count.cgi">で呼び出す。
img_count.cgiは、画像(の中身)を返すCGI。(readしてprint)
こうすれば、ブラウザがHTMLを読んだ後に画像としてimg_count.cgiを取りに行く。
0658nobodyさん02/12/23 17:31ID:???
read(STDIN,$i,$ENV{CONTENT_LENGTH});
foreach(split(/&/,$i)){
    /=/;
    $in{$`} = $';
}

read(STDIN,$i,$ENV{CONTENT_LENGTH});
foreach(split(/&/,$i)){(
    $key,$val) = split(/=/,$_);
    $in{$key} = $val;
}

どちらが効率が良いでしょうか。
あんまり変わりません?
0659nobodyさん02/12/23 19:16ID:???
配列に1行1文の要素が入っていて、/zzz/でマッチした1行を削除するにはどのようにしたら良いですか?
ヒントだけでもいいのでお願いします。
0660nobodyさん02/12/23 19:25ID:???
>659
foreach(配列){
if(/xxx/でマッチしたら){その行を削除}
}
0661nobodyさん02/12/23 20:14ID:???
>660
レスありがとうございます。
ループを使ってマッチしたら、その行を削除というのは分かるのですが、「その行を削除」の所が分からないんです・・・

while(@配列){
if($_ =! /zzz/){
push (@新しい配列,$_);
}
}
@配列 = @新しい配列;

こんな感じでしか思い付かないのですが、何かいい方法お願いします。
0662nobodyさん02/12/23 20:30ID:???
@line = grep{ ! /zzz/} @line;
0663nobodyさん02/12/23 20:43ID:???
>>654 嘘教えちゃいかんよ。
perl -w -e '%s = (a , 1); print $s{a};'
perl -w -e '%s = (a => 1); print $s{a};'
066464102/12/23 20:50ID:???
>>647
そのように外部プロセスと通信するのですか。

手持ちのWindows環境だと、'-|'は(forkを使っているみたいなので)
動きませんが、UNIX環境で試した所、見事に動いてくれました。

それと調べた所、IPC::Open2という標準モジュールでも
外部プロセスとの通信ができるようで、こちらを使うことにしました。

わざわざサンプルコードまで付けて頂き、ありがとうございました。
謎が一つ解けました。。
0665nobodyさん02/12/23 20:51ID:???
>661
それで悪い理由は何?
=!の部分がわけわからんけど。
0666nobodyさん02/12/23 20:54ID:???
プログラミングで速度は重要だが、それと同等以上に安定性と保守性は重要。
速度を軽視するのは良くないが、だからと言って、自分に不相応な高速化に挑んで安定性や保守性がなくなっては意味がない。
高速化のコードを教えられても、自分で保守しきれないと思ったら、自分でわかるやり方に戻すのも利口な人間の判断だよ。
プログラミングはタイムトライアルじゃないんだから。
0667nobodyさん02/12/23 21:11ID:???
で、自分は利口だと、そう言いたいわけですね? :-)
066865902/12/23 22:00ID:???
>662
ありがとうございます。
その方が僕のよりかなり良さげですね。
>665
=!じゃなくて!=でした。
何か配列を無駄に出し入れしている気がしたので。
0669nobodyさん02/12/23 22:08ID:???
!~ ですが・・
0670nobodyさん02/12/23 22:40ID:ty3RFcqj
今a.cgiというページに入りいくつかのフォームを選択して
その選択した結果をb.cgiに送りb.cgiで結果を表示、ファイルに書き込み
をするということができています。

これをa.cgiで選択したものをa.cgiに送り表示、ファイルに書き込みさせたいのですが
どうやらhiddenという、コマンドをもちいて
1回目と2回目のページの閲覧を場合わけすればできるみたいなんですが
どうやればいいのですか?

<INPUT type="hidden" name="action" value="write">
こんなのを送信ボタンと一緒につけてやるみたいなんですが…。
0671nobodyさん02/12/23 22:44ID:ExE7e9sR
ttp://www2000.dyndns.org/
0672nobodyさん02/12/23 23:12ID:???
>>670
> <INPUT type="hidden" name="action" value="write">
> こんなのを送信ボタンと一緒につけてやるみたいなんですが…。

書き込みフォームのなかにこれを入れておくと、CGI側では他のフォームと同じように
$in{action} という感じで値が取り出せる。(この場合、中身はもちろん write)
ただ単にCGIが呼ばれただけだと $in{action} の中身は空。
これをCGIの冒頭で判断して、表示だけするなり書き込みするなり処理を行う。
ちなみに"action"と"value"の部分は、他の name の中身と重複しなければ
好きな文字列でいいよ。
0673nobodyさん02/12/23 23:14ID:/nqoyrjh
2ch風の掲示板作りたいんですけど、どうすればいいですか
0674nobodyさん02/12/23 23:15ID:???
>>673
さがせや。そして自分好みに改造。それが一番楽。
067567002/12/24 01:03ID:o+cSQN2k
>>672


$in=$form{action};

if($in eq "write"){
&write_file;
}

<FORM METHOD="POST" ACTION="a.cgi">

<INPUT TYPE="submit" VALUE="実行">  
<INPUT TYPE="hidden" name="action" value="write">
 
こんな感じでやれば、ただページを閲覧した1回目の時は何もしないで
フォームを選択した2回目のときはifの中の&wite_fileを実行するってことでよいですか?
0676nobodyさん02/12/24 01:32ID:???
>>675

微妙に甘い。それではwriteがあった場合、
write_fileが実行されるが、その後で本来の表示もされる。

if ( $in eq 'write' ) {
&write_file;
} else {
&read_file:
}
exit;

この方がよかないか?
0677670=67502/12/24 01:57ID:o+cSQN2k
#!/local/bin/perl

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$cgi_url = './hid.cgi';
$in=$form{action};

if ( $in eq 'write' ) {
&write_file;
} else {
&read_file:
}

print "Content-type: text/html\n\n";
print <<"END";

<FORM METHOD="POST" ACTION="$cgi_url">
<tr><td align=right>選択<br></TD><td align=left>
<select name="box"><option><option value="1">yes<option value="0">no</select></td></tr><br>
<INPUT TYPE="submit" VALUE="実行">  
<INPUT TYPE="hidden" name="action" value="write">
END
sub write_file{print "2回目ですね<br>";}
sub read_file{print "1回目ですね<br>";}
exit;


これだとできないんですけどなぜですか?
0678nobodyさん02/12/24 02:03ID:???
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>1と3が無いと誰も答えられないよ。
>良い回答は良い質問から。一緒に勉強しましょう。
0679nobodyさん02/12/24 02:28ID:???
>>677
HTTPヘッダ吐く前にprintしたらいかんだろう。

print "Content-Type: text/html\n\n";

をif の前に置く。
0680nobodyさん02/12/24 10:42ID:???
>>588
アホを怒ったりはしないが自分で努力せずに「聞きゃいいや」って考え方に
教える気力を奪われる
>>589 はどういう場合に実行されるか考えれば貴方にとって必要か不必要か
判るはず。アホを自慢せずに自力で考えましょう
0681nobodyさん02/12/24 16:14ID:V710Vuw6
大きな容量を扱うのできになります。
rindexって便利そうなのですが、
1バイトずつ戻ってくれるのでしょうか。
頭から調べなおすのでしょうか。
0682nobodyさん02/12/24 21:26ID:0ZCnncs6
滅多に使わないクラスモジュールを、必要なときだけ読み込みたいと思い、
eval "use $module";
と書いてみました。
しかし、useとevalでぐぐってみてもヒットしません。
不安なので、ベターな方法を教えてください。
0683nobodyさん02/12/24 22:43ID:???
>>682
それはできないよ
0684nobodyさん02/12/25 00:41ID:???
>>682 man perlfunc
use Module LIST
use Module
Imports some semantics into the current package from the named module,
generally by aliasing certain subroutine or variable names into your package.
It is exactly equivalent to
BEGIN { require Module; import Module LIST; }
0685nobodyさん02/12/26 02:12ID:wZ43brtn
fork()した後、親プロセスと子プロセスで共通に使える変数(一方の変更が他方に影響を与える変数)
っていうのは使えませんかねぇ。
068668502/12/26 02:53ID:wZ43brtn
次のようにしても親の変更が子に反映されません。
実は685を書き込むまで参照を知りませんでした。
cのポインタみたいに理解しているのが間違いなのだろうか…?

$i = 774;
$ip = \$i;

$$ip++;

if( fork() ){
  while(1){
    print "親:$$ip\n";
    $$ip++;
    sleep(2);
  }
}else{
  sleep(1);
  while(1){
    print "子:$$ip\n";
    sleep(2);
  }
}
0687nobodyさん02/12/26 02:55ID:WbFeNueP
split の逆を うまいことやる方法はないでしょうか?

$abc = "a&b&c";

@pairs = split (/&/, $abc);

↑このような場合に、@pairs から $abc を作り直したいのですが・・・

私では、@pairs の要素数を求めてから、$abc_2 = "$pairs[0]&$pairs[1]&$pairs[2]&・・・"; のようにやっていく方針しか立てられないのです・・・

うまいことやる方法があったら、教えてください。
0688nobodyさん02/12/26 03:09ID:???
>>687
join
068968702/12/26 03:11ID:WbFeNueP
>>688
ごめんなさい・・・本当にありがとうございました・・・
0690nobodyさん02/12/26 04:56ID:???
ちょいと質問です。
Image::Magick の利用で困っているので教えてください。
img.pl というファイルを実行すると下記のエラーがでます。
---
Can't load '/usr/lib/perl5/site_perl/i386-linux/auto/Image/Magick/Magick.so' for module Imag
e::Magick: cannot open shared object file: cannot load shared object file: No such file or d
irectory at /usr/lib/perl5/i386-linux/DynaLoader.pm line 206.
at img.cgi line 4
Compilation failed in require at img.cgi line 4.
BEGIN failed--compilation aborted at img.cgi line 4.
---
一応CUI上でImageMagick は利用可能で、
Perldoc Image::Magic でもマニュアルが見れてます。
Image::Magick をインストールするとデフォルトで
PerlMagickがインストールされるみたいですが、一応再度PerlMagickをインストールしてみたところ、
make test で下記のエラーを見つけました。
---
make: *** [test_dynamic] Error 2
なにか対処法があれば教えてください。
当方の環境
Linux Slackware 8.0
Perl 5.6.1
Image::Magick 5.5.3
0691nobodyさん02/12/26 04:57ID:???
img.pl
---
#!/usr/bin/perl
use lib('/usr/local/lib/site_perl/5.6.0/i386-linux');
use Image::Magick;
$ImageFile = './test.jpg';
$ImageFile2= './test2.jpg';
$i = Image::Magick->new(size=>'320x240');
$x = $i->Read($ImageFile) ;warn "$x" if "$x";
$x = $i->Magnify() ;warn "$x" if "$x"; # 画像を縦横2倍に拡大
$x = $i->Write($ImageFile2);warn "$x" if "$x";
undef $i;
print "Content-type: text/html\n\n";
print "<html><a href=\"../imgtest/test.jpg\">使用前</a><br><a href=\"../imgtest/test2.jpg\">
使用後</a></html>\n";
exit;
0692nobodyさん02/12/26 04:59ID:???
補足:
1 img.pl ではなく .cgi の間違いでした。
2 img.cgi の 4行目は use Image::Magick; になってます。

一度に投稿できなかったので分けて投稿しました。
板汚しですいません。
0693nobodyさん02/12/26 05:15ID:???
自己解決?

vi /etc/ld.so.conf で /usr/lib/perl5/site_perl/i386-linux/auto/Image/Magick/ を追加したら
正常動作しました。

ImageMagickってこういうものなんでしょうか?^^;
0694nobodyさん02/12/26 11:23ID:DQIeVDZ8
質問です。
ただCGIでHTMLを読み込んで表示させたいのですがどうすればよいでつか?
本当にただindex.htmを外から読み込んでそのまま表示させるだけです。
0695nobodyさん02/12/26 11:37ID:???
>694
index.htmをファイルオープンして読み込んで表示するだけだが、
本当にそれしかしないなら、直接index.htmを表示しなさい。
0696nobodyさん02/12/26 11:48ID:???
>>694
index.htmlを読み込んで出力するまえに
適切なヘッダも出力しなきゃだめよ。

Content-Type: text/html

とか
0697nobodyさん02/12/26 14:46ID:???
>>694
なんだ、マルチポストじゃねえか。
別スレで答えて損した。てめえ氏ねよ。
0698nobodyさん02/12/26 18:04ID:???
perlで一定時刻毎に処理をするようなスクリプトはどうすればよいですか?
処理するところは書けたのですが、「一定時刻に」というところでつまづいています。
0699nobodyさん02/12/26 18:04ID:jnr3kh76
G(3);
sub 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:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0701nobodyさん02/12/26 18:45ID:???
>>698
ループを作り時刻をチェックし希望の時刻になったら目当ての処理実行が単純
070269802/12/26 18:54ID:???
>>701 それだと常にperlが実行されている状態になりますよね?
0703nobodyさん02/12/26 19:00ID:???
>698
ありがちな方法なら、「最後のアクセスと時間帯が違えば処理をする」という方法。
1時間に1回の方法なら、最後にアクセスした時の「時間(11時とか)」を保存しておき、
「前回の時間と違ったら(11時じゃなくなったら)処理をする」などでやる。
ただし、1時間以上アクセスがなかったら困ったりする事もある。

あと、鯖がかなり限られるがcronもある。
これはスレ違いだから自分で検索すれ。
0704nobodyさん02/12/26 21:25ID:???
>>685
別プロセスのメモリ(変数)をいじることは不可能。
0705nobodyさん02/12/26 23:31ID:???
>>699
普通に関数を再帰的に呼び出してるだけだが?
それ以上説明のしようがない。
0706nobodyさん02/12/27 00:12ID:BkvjWsIw
厨質で申し訳ないんですが、
mod_perl を入れるために、use strict をしておこうと思ったんですが、

$| = 1;
$ENV{いろんな環境変数};

こういうのも my しないとだめなの?
0707nobodyさん02/12/27 00:15ID:???
>>706
グローバル変数っしょ?

つぅか自分で試しても罰は当たらんと思われ・・・
0708nobodyさん02/12/27 00:54ID:qm28R9Zo
https://self.0038.net/cgi-bin/fcc_tel_dialup_inquiry_usage_form.cgi.pl
フュージョン料金明細で必須項目をテキストにあらかじめ記入しておいて
それと現在の日時をもとに一発で明細結果がでるようする方法はあるでしょうか?
いちいち項目をコピペするのが面倒なんです。
070970602/12/27 01:30ID:BkvjWsIw
use strict; って、全部のファイルにしなあかんの?
例えば、
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:???
やってみればいーじゃんかよー
071169902/12/27 01:36ID:BtYEwdxr
実行した際に吐き出される値の流れが
途中からよ〜分かりません
どこで値が保持されどの様に順番に吐き出されるのか?
0712nobodyさん02/12/27 01:37ID:???
common.plはなによ?
パッケージならパッケージ変数になってるし、
use strict; しなくてもそのスクリプト内でしか使わないなら、my とかしとけばいいだけじゃない?

>common.pl には、何も書かなくても自動的に use strict されるのか?
no!
0713nobodyさん02/12/27 02:31ID:???
G(3);
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";
}
071469902/12/27 08:47ID:???
>>713
ありがとう
なんとなく感じはつかめました
0715nobodyさん02/12/27 10:20ID:???
>>701
その通り、常に実行ですね
>>703
で出てる様にcronを使う手がありますがユーザーに開放している鯖はかなり少な
いし、perl(スクリプト)での質問でしたので>>701としておきました

笑える手として、webサーバーがあるならhtmlより定期的に呼び出すとかもあるけ
ど、これもスレ違い
0716nobodyさん02/12/27 10:46ID:???
>>715
答えが目の前にあるのにすれ違いか。おめでたいな。
0717nobodyさん02/12/27 20:28ID:pRxcckDo
リファレンスについて、詳しく解説している日本語サイトを
ご存知の方がいらっしゃいましたら、是非教えてくださいまそ。
0718nobodyさん02/12/27 20:35ID:yQoOgQCT
http://www.google.co.jp
0719nobodyさん02/12/27 20:38ID:???
>>717
javaの参照とかCのポインタとかをつまみ食いするのも手だと思う。
0720nobodyさん02/12/28 00:49ID:???
>>719
なるほど。javaは出来ないので、Cの方をつまんで来ます。
0721nobodyさん02/12/28 01:10ID:???
ハッシュのリファレンスで

foreach(keys %HASH){
・・・
}

に相当する処理ってできないんでしょうか?
できるのならやり方教えてホスイ。
0722nobodyさん02/12/28 01:34ID:???
>>721
もっと具体的に書く方がよいラスイ。
0723nobodyさん02/12/28 01:39ID:???
$ref= \%hash;
for (keys %$ref){
    print $_,"\n";
}
0724りゅう02/12/28 12:37ID:7mOI1Cp3
参考書に書いてあった簡易掲示板を真似て作ってるんですが、
その本に付属していたCDのサンプルをLocalhostに置くと動くんですが、
自分で真似て作ったやつだと、エラーが出てしまいます。何回も見なおしたけど
違いが分かりません。どなたか違っている個所を教えてくれるとありがたいです。
0725りゅう02/12/28 12:38ID:7mOI1Cp3
CDに入っているサンプル

#!/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
漏れが作ったものです。よろしくお願いします。(・A・)

#!/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_
■ このスレッドは過去ログ倉庫に格納されています