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

Perlコーディング初心者質問スレ Part 38

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0085nobodyさん04/10/12 16:54:23ID:???
>>84
>>3
http://perldoc.com/perl5.8.4/lib/Benchmark.html
http://pc5.2ch.net/test/read.cgi/php/997829243/

出力のどの部分が分からんのか具体的に示した方がいいよ。
0086nobodyさん04/10/13 12:37:35ID:SrofvYG0
Q:0〜6の数字をそれぞれ$p1 〜 $p7に代入したい
ただし、$p1 〜 $p7はそれぞれ違う数字になるように代入したい
と思い、こんなコードを考えたのですが
 
00878604/10/13 12:38:00ID:SrofvYG0
$p1 = int(rand 7);
 $p2 = int(rand 7);
 while($p1 == $p2){
 $p2 = int(rand 7);
 }
 $p3 = int(rand 7);
 while($p1 == $p3 or $p2 == $p3){
 $p3 = int(rand 7);
 }
 $p4 = int(rand 7);
 while($p1 == $p4 or $p2 == $p4 or $p3 == $p4){
 $p4 = int(rand 7);
 }
 $p5 = int(rand 7);
 while($p1 == $p5 or $p2 == $p5 or $p3 == $p5 or $p4 == $p5){
 $p5 = int(rand 7);
 }
 $p6 = int(rand 7);
 while($p1 == $p6 or $p2 == $p6 or $p3 == $p6 or $p4 == $p6 or $p5 == $p6){
 $p6 = int(rand 7);
 }
 $p7 = int(rand 7);
 while($p1 == $p7 or $p2 == $p7 or $p3 == $p7 or $p4 == $p7 or $p5 == $p7 or $p6 == $p7){
 $p7 = int(rand 7);
 }
00888604/10/13 12:38:40ID:SrofvYG0
見れば見るほど頭悪そうな感じがします。。。7くらいならいいけど
p1〜p100までに1〜100までの数字をそれぞれ違う数字が入るようにするなんてするとひどいコードになる事に・・・
うまくループ構文使えばもっと簡単なコードになる気がするのですが
私では作れませんでした・・・どなたかご存知でしたら教えていただけますでしょうか。
(ちなみになぜこんな事をやりだしたかというと、特定個数の全てのアイコンを毎回順序をランダムで表示したいと考えたからです)

連続カキコすいません。(改行エラーでたので)
0089nobodyさん04/10/13 12:41:40ID:???
質問です。BBSのログを読み出す際に、URLがある場合にはリンクを貼ろうと思っています。
例えば、普通にリンクを貼るだけならできるのですが、
自サイトへはinner、他サイトへはouterというスタイルを適用したいと思っています。

ログの例:(MyIDを含むのが自サイトとします)
http://localhost/MyID/<;BR>http://www.2ch.net/

出したい出力結果(HTML上):
<A href="http://localhost/MyID/"class="inner">http://localhost/MyID/<;/A><BR><A href="http://www.2ch.net/" class="outer">http://www.2ch.net/<;/A>

sub link { # 引数に渡すのはログ全体
 $_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
 $_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}

こう記述すると、前者も後者も全てouterになってしまいます。

if ($_[0] =~ /MyID/) {
 $_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
} else {
 $_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}

こうすると、今度は自サイトへのリンクは貼られるのですが、他サイトへのリンクは貼られなくなってしまいます。
上記の出したい出力結果を出すには、どのように記述したらよいのでしょうか。
0090nobodyさん04/10/13 13:24:29ID:???
>>86
数値を配列に入れてから
その配列をランダマイズすれば?
00918604/10/13 13:33:52ID:SrofvYG0
>>90
配列ってランダマイズできるんですか・・・。
知りませんでした汗
ありがとうございました。探してやってみます。
0092nobodyさん04/10/13 13:44:56ID:???
>>86

@array=();
for ($count = 0; $count < 7; $count++) {
push(@array,$count);
}
&shuffle( \@array );

sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}

&shuffleを呼び出す前と、呼び出した後で@arrayの中身を見てみよう。
0093nobodyさん04/10/13 13:55:48ID:???
>>89
\大杉
0094nobodyさん 04/10/13 15:22:33ID:???
>>86
@outにランダムな数値を出力。

@in = (1 ..100);
@out = ();
srand;
foreach (@in) {
  my $r = int rand (@in + 1);
  push(@out, $in[$r]);
  $out[$r] = $_;
}
0095nobodyさん04/10/13 15:30:25ID:???
>>94
それ、値が入らない場合もあるし、
同じ値が入りまくってるじゃん。
>>86の要件を満たしてないぞ。
0096nobodyさん04/10/13 15:48:10ID:???
>>86

srand(time());
%hash = map {$_ => rand()} 0 .. 6;
@array = map $_, sort {$hash{$a} <=> $hash{$b}} keys(%hash);
print "@array\n";
0097nobodyさん04/10/13 16:04:53ID:???
いろいろ書いてみるのも楽しいのだが、オレは堕落したので
List::Utilのshuffle使うな
0098nobodyさん04/10/13 16:07:16ID:???
俺は5.6だから使えないYO!!
モジュールに頼りっきりになるのもアレだが、でも使えるものは使っていきたいよね。
0099nobodyさん04/10/13 16:11:23ID:???
(12 15 17 20 50)のような配列があったとして
↑の配列の中から18に一番近い数字を取り出すみたいなのはどうしたらいいでしょうか?
0100nobodyさん 04/10/13 16:20:30ID:???
>>99
$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
  my $diff = abs($_ - $seed);
  $min = $_ if($diff <= $tmp);
}
print $min;

こんなんでどない?
01019904/10/13 16:24:16ID:???
ミスった。

$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
  my $diff = abs($_ - $seed);
  if($diff <= $tmp){
    $min = $_;
    $tmp = $diff;
  }
}
print $min;
0102nobodyさん04/10/13 16:27:05ID:???
もし、数値の配列がクソ長いのであれば、
abs($_ - $seed);が0の時はlastで抜けちまった方が良さげ
0103nobodyさん04/10/13 16:32:45ID:???
thx!!!
0104nobodyさん04/10/13 16:37:15ID:???
オレはList::Utilラブなので、

reduce {abs($a-$seed)<abs($b-$seed)?$a:$b} @data
01058604/10/13 18:17:10ID:???
いろんなコードを書いていただいてありがとうございました。
書いていただいた全てのコードが勉強になりました。
一つ一つ検証して試してみたいと思います。
0106nobodyさん04/10/14 00:02:36ID:pD0/ztzC
連想配列の配列数を得るにはどうすればいいのでしょうか?
forなどで一個一個数えていくしかないのでしょうか?
0107nobodyさん04/10/14 00:12:11ID:???
>>106
$a = scalar keys %HASH;
01088904/10/14 00:15:43ID:???
どなたかわかる人いらっしゃらないでしょうか;
それともこういうのは理論上無理なんですかね・・・
0109nobodyさん04/10/14 00:33:02ID:???
@data = ('A,2,黄緑',
         'C,3,青紫',
         'B,4,赤',
         'C,6,青',
         'A,7,緑',
         'A,9,紫',
         'B,10,黄');
こんな感じである配列の先頭にあるa,b,cの数を数えて

連想配列に
%count = (A,3,
             B,1,
             C,2);
こんな感じに持って行くにはどうしたら良いんでしょう?
0110nobodyさん04/10/14 00:46:44ID:???
(りんご、みかん、りんご、ぶどう、みかん、すいか、りんご)
という配列のなかから一番多いものだけを取り出すってのはどうしたらいいですか?
この中だとりんごに当たりますね。
0111nobodyさん04/10/14 00:49:57ID:???
ここは丸投げスレか
0112nobodyさん04/10/14 00:52:58ID:???
>>111
答えられない人はお帰りください^^
0113nobodyさん04/10/14 01:31:30ID:???
>>108
まずurlにマッチングさせてからinnerかouterか判定させれば?
urlの正規表現についてはググればすぐに出てくるので。
あと、エスケープする必要があるものとそうでないもの調べてくれ。
0114nobodyさん04/10/14 02:27:52ID:???
>>110
ここはアルゴリズムを質問するスレではない。
「こういうアルゴリズムを考えたので Perl で実装したいんですが
どうコーディングしたら良いですか?」
という質問形式にして出直してきたまえ。

例えば、いったん各々の個数を全部数え上げるというアルゴリズムで行くなら、
ハッシュをインクリメントしていって、数え終った後でソートする、というのが素直だろうな。
0115nobodyさん04/10/14 05:34:49ID:???
前に114と同じことを書いたら叩かれたのを思い出した
0116nobodyさん04/10/14 06:51:34ID:ETIFZxwk
【目的】
Net::SSH::Perlを使ってサーバに入り、任意のメールアドレスに対してメール
を送信するスクリプトを作る。

【スクリプト】
#!/usr/bin/perl -w
use Net::SSH::Perl;
$host = "www.test.net";
$user = "hogehoge";
$pass = "2ch_test";
$cmd = "mail hoge\@hoge.ne.jp";
$body = "www.test.net is ok\n";
$ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
$ssh->cmd($cmd);
$ssh->cmd($body);

【説明】
スクリプトを実行したとき、指定したサーバにログインすることはできるので
すが、それ以上処理が進まず、メール送信もされません。ただ、スクリプトを
実行させてキーボードから文字を入力してCtrl-Cで処理を中断するとメールは
配信されます。
[mona@localhosst mona]% ./test.pl<Enter>
これはテストです。<Enter>
Ctrl-C

【教えて欲しいこと】
$bodyの内容を自動的に標準入力に代入し、メールを送信する。
加えて、サーバからの切断も自動的に行ってくれる。
以上の二点を解決したいです。
よろしくお願いします。
0117nobodyさん04/10/14 08:14:10ID:???
@a = "ァー";

for(@a){
@b = split / | /; #全角or半角スペースで切る
}

for(@b){
print;
}

というコードを実行すると何故か

と表示されます。これはどういうことでしょうか?
$aの「ァー」の部分を色々変えてみましたが、
こうなるのは「ァー」と「ぁー」です。
どなたか分る方いたら教えてください。
0118nobodyさん04/10/14 08:36:03ID:eMIY0T+H
http://www.dp.j-phone.com/dp/tool_dl/web/useragent.php
の表はユーザーエージェントの解説なのですが、表の一番下にあるような
「J-PHONE/4.0/J-SH51/SN*********」という文字列で、
SN以降を削除し他の部分だけを残したいんです。その場合の正規表現は
どう書けばいいのでしょうか?
$abc =~ s/(.+)[SN](.+)/$1/; だとダメでした。どなたかお力添えをお願いします。
0119nobodyさん04/10/14 10:24:52ID:???
>>118
$abc =~ s/SN.*//;
0120nobodyさん04/10/14 10:36:01ID:???
>>117
たぶんソースをeucで書いてるだろうから、

use encoding 'euc-jp';

を頭に追加すれば直ると思うが。

unicode機能を有効にしないperlでは日本語の2バイトコードは
1つの文字としては扱えず、1バイトずつバラバラのバイト列と
なってしまう。

"ァー" = "\xa5\xa1\xa1\xbc"
/ | / = /\xa1\xa1| /

なので、ァーの部分は真中の\xa1\xa1の部分を区切りとして
splitされてしまい、\xa5\xbcが出力される。これは「ゼ」。

同様に「ぁー」のときは「ぜ」になってるはず。



0121nobodyさん04/10/14 10:38:58ID:???
>>117
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
ここから下を読むことを勧める。
012211804/10/14 10:39:49ID:eMIY0T+H
>>119
レスありがとうございます。
でもそれではうまく行きませんでした。
SN以降が削除されずにそのまま出力されているようです。
012311804/10/14 10:43:11ID:eMIY0T+H
失礼、うまくいきました!
感謝感謝です。ありがとう。
012411704/10/14 12:36:50ID:???
>>120
ありがとうございます!
完璧な説明大変感謝してます。
012511704/10/14 12:42:18ID:???
感謝した先から申し訳ないのですが、
コードはEUCで書いてるのですが
扱ってるデータがS-JISだったりします。
use encoding 'euc-jp';
したら、データが化けてしまいます。
そういう場合
:コードの文字コードと 扱ってるデータの文字コードが違う場合:
どう対処したらよいのでしょうか?
0126nobodyさん04/10/14 12:43:53ID:???
>>125

>>6
012711704/10/14 13:13:06ID:???
>>126
コーディング、の定義を教えて下さい(・_・)(._.)
0128nobodyさん04/10/14 13:45:02ID:???
>>127
最低限の検索ぐらいはやった上で質問しなきゃ。
コーディングでググれば?

検索わからない?
http://pc6.2ch.net/pcqa/
012911704/10/14 13:59:16ID:???
>>127
は僕じゃないです。
変な質問して、荒らしてしまって申し訳ないです。
0130nobodyさん04/10/14 14:04:44ID:???
>>125
ここがわかりやすかった

ttp://namazu.org/~tsuchiya/perl/perl-5.8.html
013111704/10/14 14:05:05ID:???
自己レスです。

http://www.din.or.jp/~ohzaki/perl.htm#JP_Trans

にそのまんま答えが書いてありました。
お騒がせいたしました。
0132nobodyさん04/10/14 17:55:56ID:8JHhLpH4
my($takesi,@takesi);



my *takesi;

と同じと考えてよろしいでしょうか?
0133nobodyさん04/10/14 18:02:41ID:???
久しぶりだなこのスレ
コーディング 【coding】

プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)

>>126は何故に>>125に対してこれを読めって言ったの?
文字コード問題は設計とは関係ないってか?そんなアホな事はないよな。
そもそもよほどのことでない限りコーディングと無関係にはなれないんだがな。

例えば俺の話とかなwww完全にすれ違いってやつだ。
まあお前ら少しは言葉の勉強もしろよ。
0134nobodyさん04/10/14 18:03:09ID:???
>>132
違うよん。
0135nobodyさん04/10/14 18:04:58ID:???
>>134
そうだったのですか。
あやうく欲張るところでした。
ありがとうございました。
0136nobodyさん04/10/14 23:56:21ID:mdncFzXx
$abc = shift;

この shift ってどういう意味なんでしょうか?
関数ですか?
0137nobodyさん04/10/15 00:34:17ID:???
$b = "こん"
$c = "にちわ" 
変数$aに$bと$cを結合したもの、つまり
"こんにちわ"を代入するには
$a = $b.$c
で大丈夫でしょうか?
0138nobodyさん04/10/15 00:39:03ID:???
便乗質問。
>>137と似てるんですが、
$b = "co"
$c = "jp"
の場合に $a に co.jp を代入するにはどうすればいいですか?
$a = $b\..$c
で合ってます??
0139nobodyさん04/10/15 00:44:50ID:???
>>136
関数。shift unshift pop push 他。

>>138
$a = $b.'.'.$c
0140nobodyさん04/10/15 00:53:13ID:???
>>137
聞く前になんで試してみないの?
0141nobodyさん04/10/15 01:17:23ID:???
>>140
面倒なんだろ?
まあよくわからんが。
0142nobodyさん04/10/15 08:34:27ID:???
このままperlの言語仕様を全部質問されそうな勢いだな。
何スレぐらいかかるだろうか。
0143nobodyさん04/10/15 08:35:47ID:0zK8noVI
掲示板があったとして
log.txtを編集するために
bbs1.cgiでflockした場合
bbs2.cgiで編集しようとした時にも
ロックされてるんですか?
0144nobodyさん04/10/15 10:12:58ID:???
>>139さん、shiftって配列の先頭の要素を削除する関数ではないんですか?
shift (@data);
とかならわかるんですけど、
スカラー = shiftという意味がわからないのです。
0145nobodyさん04/10/15 10:54:53ID:???
print "Location: http://www.2ch.net/";
という文のみのファイルを作って、プラウザからアクセスすると指定URLに飛びますが、
上記の文より前に
print "Content-type: text/html\n\n";
などと書かれていると、ブラウザ上に「Location: http://www.2ch.net/」という文字列が表示されてしまいます。

やりたい事は、フォームから検索をかけて、検索処理中の間は特定のページを表示して、
検索が終了したらその結果を表示する画面に遷移する、ということです。
「検索処理のリクエストを受ける → 特定のページを出す「お待ちください」など → 検索終了 → 結果表示」

要するに、1回のPerlの処理で、ブラウザ上で複数のページ間を遷移させる事は可能でしょうか。
0146nobodyさん04/10/15 11:09:31ID:???
>>144
マニュアルのshiftの項をよく読め。

ttp://perldoc.jp/docs/perl/5.6.1/perlfunc.pod とか。
0147nobodyさん04/10/15 11:22:44ID:???
>>145
君のやろうとしていることは perl とは関係無い。
javascript を勉強する方が役に立つだろう。
0148nobodyさん04/10/15 13:29:36ID:???
HTMLでmetaで指定する部分は全てヘッダで返せるのでしょうか?

例えば
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/Javascript">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">

を、

print "Content-type: text/html; charset=Shift_JIS\n";
print "Content-Style-Type: text/css\n";
print "Content-Script-Type: text/Javascript\n";
print "cache-control: no-cache\n";
print "pragma: no-cache\n\n";

にした場合、きちんと返ってるのでしょうか?
0149nobodyさん04/10/15 13:33:40ID:???
聞く前にやってみてはどうかね。
0150nobodyさん04/10/15 13:45:29ID:???
返ってるか分からないんです…
0151nobodyさん04/10/15 13:55:55ID:???
最近はやればわかるのにやりもしないで質問してくる連中が多いな
0152nobodyさん04/10/15 14:55:30ID:???
>>148
一点目のアドバイス。
「きちんと返っているかどうか確認する方法を教えてください」と質問すれば
いじめられることもなかっただろうに。

二点目のアドバイス。
どっちにしても Perl と全く関係ない質問なので、
WebProg初心者スレなどで聞く方が正解。
0153nobodyさん04/10/15 15:35:31ID:???
>>143
bbs2.cgiがflock使うなら勿論ロックになる。
flockはセマフォでの唯一のロック獲得争いにすぎない。
そのロックしないプログラムには通用しない。
0154nobodyさん04/10/15 15:37:05ID:???
>>153だが我ながら変な日本語だ。逝く。
0155nobodyさん04/10/15 16:21:08ID:???
>>154
bbs.cgiでlog.txtに書き込みするためロックしました
そのままdelete.cgiでlog.txtの書き込みの一部を削除しようとした場合には
ロックはされてないということでいいんですか?
0156nobodyさん04/10/15 16:57:04ID:???
flockによるロックは、トイレにカギをかけるようなものではなく、
カギのかからないトイレのドアに使用中と札を下げるようなもの。
その札を見てくれる奴には効果はあるが、ハナから見ちゃいねー
奴には無効。delete.cgiがどっちの奴かはオレにはわからない。
0157nobodyさん04/10/15 17:40:29ID:???
>>155
delete.cgiが、flockでlog.txtに対するロックを獲得しようとすれば、ちゃんと排他制御がなされる。
(bbs.cgiがロックを返すまで待つか、即座に獲得失敗するかはモード次第)。
しかし、delete.cgiがflockを行っていないのなら、bbs.cgiによる排他制御は無意味。
bbs.cgiがロックを得ている・得ていないに関わらず操作可能。
flockは、お手軽なロック機構にすぎない。
(ロック用ディレクトリとか、スリープするか即座に失敗させるかを自力でやらなくて良いって程度のもの)。
0158nobodyさん04/10/15 17:49:21ID:???
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
0159nobodyさん04/10/15 17:55:33ID:???
>>153だが、
>flockはセマフォでの唯一のロック獲得争いにすぎない。
これは勘違いだったようだ。perlのflockがセマフォ使ってるわけじゃないか。
もう氏ぬ。
0160nobodyさん04/10/15 20:46:48ID:M3+xPf5C
クーロンでperlで作成したブログラムを起動したいのですが、
どうしたらいいのでしょうか? 普通はブラウザのボタンから起動されると
思うのですが、ある時間が来ると自動で動かしたいのです。よろしくお願いします。
0161nobodyさん04/10/15 21:05:08ID:???
>>160
好きなようにセットしろよ
使い方分からないならググれば一発だろ

ついでにスレ違いな
0162nobodyさん04/10/15 23:13:44ID:???
>>159
下の下の方(flock(2)やfcntl(2)の下のほう)ではセマフォつかってるよ。多分。
それでも↓は意味不明だけど。
> >flockはセマフォでの唯一のロック獲得争いにすぎない。
0163nobodyさん04/10/16 02:52:59ID:???
1000ステップのperlスクリプトと、200ステップのperlスクリプト、
どちらも実行ステップは100だとしても、やはり後者の方がサーバに対する
負荷は少ないのだろうか。
0164nobodyさん04/10/16 03:14:53ID:???
それはもちろん自分で負荷を計測してから聞いt(
0165nobodyさん04/10/16 11:06:14ID:???
>>163
1ステップだ。↓を実行してみな
while(1) { fork;}
0166nobodyさん04/10/16 12:33:14ID:???
前のカキコした香具師とは関係ないが便乗して

計測の方法が分かりません。。。
ググったらWin鯖は無理と書いてあったんですが、Win鯖で出来るソフトありませんか?
0167nobodyさん04/10/16 20:03:43ID:???
>>166
話が見えない。
ああ、誤爆か…
0168nobodyさん04/10/16 21:45:26ID:???
perlのスクリプトでflockしたファイルに対して、PHPのスクリプトでflockしたら(もしくはその逆も)、
ちゃんと排他は行われるでしょうか?
0169nobodyさん04/10/16 23:05:32ID:???
CGIカウンターを設置したいので、perlを勉強しています。参考書を見て↓のを作成したのですが。

# カウントファイルの読み込み
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval{ flock(FILE, 2);};
$count = <FILE>;

# カウントファイルの書き込み
seek(FILE, 0, 0);
print FILE ++$count;
close(FILE);

# サーバ出力
print <<END;
Content-type: text/html
中略)
END

Apachでエラーログをみると Premature end of script headers と出てしまいます。
どの部分を訂正すればよいのでしょうか?ご存知の方、ご指導お願いします。
0170nobodyさん04/10/16 23:13:07ID:???
print <<END;
Content-type: text/html
中略)
0171nobodyさん04/10/17 01:00:06ID:???
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");

このdieの部分はどこに出力されるのですか?ログとか?
0172nobodyさん04/10/17 01:03:49ID:???
標準エラー出力 (STDERR)
0173nobodyさん04/10/17 01:38:29ID:sz1VkLQM
配列のリファレンスをforeachで処理するにはどうしたらいいですか?
$dbh->{NAME}
が配列へのリファレンスだとして、
$dbh->{NAME}->[0]ではアクセスできる状態です。

foreach($dbh->{NAME})
{
 print;
}

foreach($$dbh->{NAME})
{
 print;
}

等とやってもうまくいきませんでした。
0174nobodyさん04/10/17 01:39:32ID:???
@{$dbh->{NAME}}
0175nobodyさん04/10/17 01:41:51ID:???
>>174
うまくいきました。ありがとうございました。
0176nobodyさん04/10/17 10:10:48ID:???
>170
中略)の部分は

<html>
<head><title>perlアクセスカウンター</title></head>
<body>
<P>あなたは$count番目の訪問者です。</p>
</body>
</html>
END

Premature end of script headers 
エラー:カウントファイルが開けません のエラーログが出ます。

open or die の文がおかしいのかと思ったのですが、良くわかりませんでした。よろしくお願いします。
0177nobodyさん04/10/17 10:20:37ID:???
初心者なんで間違ってるかもしれんが、
Content-type:text/htmlの後に改行が2つ(\n\n)必要だった希ガス
0178nobodyさん04/10/17 10:21:41ID:???
openに失敗してるんだろ
0179nobodyさん04/10/17 13:45:28ID:???
>>168
双方が協調して動作するためには、同じ方式のロックメカニズムを使用する必要があるが、
perlのflockはOSが提供しているflockとは限らない、PHPは知らない。
プラットフォームインディペンデントに作るなら、昔ながらのロックファイル方式か、
OSの提供する排他制御のプリミティブを直接呼び出すのがいいだろう。
0180nobodyさん04/10/17 22:56:51ID:???
二次配列等は使えますか?
0181nobodyさん04/10/17 23:20:50ID:???
>>180
ここに書く前にperlのdocument群を読んで欲しいかも。。。
0182nobodyさん04/10/18 01:01:57ID:???
>>180
2年前に同じ質問したことあるな・・
018318004/10/18 01:23:59ID:???
これは失礼いたしました…
0184nobodyさん04/10/18 04:17:33ID:???
myについて質問させて下さい。

sub a
{
my $daskin;
$daskin="かきくけこ";
&b;

&c;
}

sub b
{
my $daskin;
$daskin="あいうえお";
}

sub c
{
print "$daskin";
}

こういったスクリプトを書いた時、&a、&b、の中で$daskinは局所化されているので
&c内のprintの表示が空になることを期待していたのですが、「あいうえお」と表示されてしまいます。
変な質問ですが、みなさんにとっては納得のいく結果でしょうか?
私の局所化処理が間違っている場合、教えて下さいm(__)m
■ このスレッドは過去ログ倉庫に格納されています