Perlコーディング初心者質問スレ Part 49
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/05/31(水) 04:32:28ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0320308
2006/06/08(木) 01:20:55ID:???「スコープが違う」というのはわかるのですが、
「なぜgrepやmapの引数に書いた時だけスコープが違うのか」がわかりませんでした。
特別な構文もなしに書いた「$_ * 2」が、mapを呼び出す時点でなぜ「20」と評価されずに
「$_ * 2」という式そのものとして渡せるのかが不思議でした。
紛らわしい書き方ですいません。質問するのは難しいですね……。
長くなってしまいました。皆様お答え頂きありがとうございました。
0321nobodyさん
2006/06/08(木) 01:29:33ID:???0322239
2006/06/08(木) 01:58:38ID:???あの後も、動作確認ができたプログラムを自分の作ったページに組み込んでみるとやっぱり動かない。
試行錯誤の末、サブルーチン名に予約語を使っていたことが分かりました。
で、ようやくさっき、思い通りのページが作れました。
ということで、とことん勉強不足を痛感したわけですが、
ここでのアドバイスがあってなんとかなったもので、一言だけお礼を言いに。
特に>>251氏。ありがとうございました。
他の皆さんも参考になりました。ありがとうです。
またトラブったら泣きつきにくるかもしれませんが、その時はその時でまたよろしくです。
0323nobodyさん
NGNG思っているのですが、eval使うぐらいしか方法はないでしょうか?
0324nobodyさん
2006/06/08(木) 07:39:13ID:???書き込んだり削除したりした後に、掲示板表示画面に戻ってきた際に
キャッシュされた以前の状態の画面が表示されてしまいます。
ブラウザに更新を知らせるにはどのようにするのがよいのでしょうか?
0325nobodyさん
2006/06/08(木) 08:28:37ID:???my $func = $obj->can($val) and $obj->$func();
いきなり$obj->$val()で動かなかったっけ?
0326nobodyさん
2006/06/08(木) 15:06:05ID:iBH9Xn1Capache1.3.35 activeperl5.8.8 mysql4.0.26
DBIを使うのにppmでモジュールをインストールしました。
DBIとDBD-mysqlです。
そうしたらどうも
$sth->fetchrow_hashrefがstrict環境下ではエラーになってしまいます。
ハッシュリファレンスの値がありませんとのこと。
以前デスクトップで作ってた環境をノートパソコンに写したのですが、
モジュールのインストールが十分か不安ですが、思い出せません。
確かdata-dumperとdbiとmsql-mysql-moduluesという3つが欲しかったのですが、
ppmで見つからなかったので他のサイトで薦められてたDBD-mysqlとDBIにした覚えが
あります。というあやふやな記憶で今回もその二つを入れたのですが、
どうも動作がしませんので間違っていたかもしれません。
この二つの入れる順番などありましたでしょうか?
それとも前者の3つのモジュールを決められた順番でいれないとfetchrowが使えませんでしょうか。
アドバイス宜しくお願いします。
0327326
2006/06/08(木) 15:08:17ID:iBH9Xn1C失礼しました。
0328nobodyさん
2006/06/08(木) 15:20:30ID:???0329nobodyさん
2006/06/08(木) 15:21:25ID:???というのも、以前Encodeモジュールでエラーがあり調べてたらWinとLinux環境とでバージョンの違いが酷かったので・・・
0330326
2006/06/08(木) 15:33:20ID:iBH9Xn1Chttp://www.rfs.jp/server/mysql/01/07.html
ここを見てperlを勉強していて、(結構前の話ですが)それでDBIもここで勉強しました。
Data-Dumper-Simpleというモジュールは過去に入れた覚えがないのですよね。
過去作っていた環境なら問題なく動いたコードなんです。
fetchrow_heshref以外は問題なく動作してるのでDBIのモジュールのインストール自体は
できてると思うんです。
さっき試しに一旦ppm unsitallしてから先にDBD-Mysqlを入れたら自動でDBIを
先にインストールされました。
モジュールのバージョンがかわってfetchrow_hashrefがダメになったのですかね。
なんでしょうか。とりあえずData-Dumper-Simpleも入れてみますね。
あ、それとstirctを外すと何故かfetchrow_hashrefは動作します。
なんですかねこの症状。
>>329
そうでしたか。
でも過去動作していたコードと考えると逆にバージョンがアップしたせいなのかもしれませんが。
0331nobodyさん
2006/06/08(木) 15:41:28ID:???たとえば
<input type="text" name="test[0]">
<input type="text" name="test[2]">
<input type="text" name="test[3]">
というフォームデータを以下のように受け取ろうと考えて
いますが上手く行きません。
use CGI;
$query = new CGI;
@test = $query->param('test');
どなたかご教授お願い致します。
0332326
2006/06/08(木) 15:43:30ID:iBH9Xn1C特にかわりありません。
やはりstrict環境下では$sth->fetchrow_hashrefが不正扱いされるようです。
0333326
2006/06/08(木) 15:45:36ID:iBH9Xn1Cそれはできません。あくまでHTMLとPERLは違う言語でHTMLには配列という概念がありません。
0334nobodyさん
2006/06/08(木) 15:46:14ID:???inputタグ内の添え字は要らない。(PHPはできたかも)
あとは@test = $query->param('test'); で読めるんじゃなかったかな?
0335nobodyさん
2006/06/08(木) 16:24:15ID:???そうですか・・・
input type=textを、type=checkboxのようにに同一要素名で
送信する事は出来ないのでしょうか?
・・・とおもったら
>inputタグ内の添え字は要らない。
こちらで解決しました!!
添え字無しできちんと配列データとして送られていました。
ありがとうございます。
0336nobodyさん
2006/06/08(木) 16:29:01ID:???同じnameで配列の様に受け取りたいならcgi-libのReadParseを使ってみてください
たしか\0を区切り文字として渡してくるので
@array = split(/\0/, $in{'param'});
で配列にできたかと
0338326
2006/06/08(木) 17:00:06ID:iBH9Xn1Cmy $dbh = DBI->connect(@$dbipass{qw/source user pass/});
my $sth = $dbh->prepare(qq|select * from order_table order by ordertime desc limit $_,1;|);
$sth->execute();
my %db_all_field = %{$sth->fetchrow_hashref};
$sth->finish;
print $_,"<br>";
}
上記を試して確認中にやっとのことで原因わかりました。
データーベースにレコードが10以下の時の対処が記述してなかったが故のkとでした。
面目ありません。
0339nobodyさん
2006/06/08(木) 18:11:03ID:iBH9Xn1Cたまにチャットとかで
只今の閲覧者5人 参加者1人
っていう表示を見かけます。
あれはどうやって実現するのでしょうか。
例えばHTMLのmetaでrefleshを使って30秒毎に相手のIPを確認して
閲覧人数を割り出すのでしょうか?
相手がCGIにアクセスしてきたらIPを取って、取得時間をデータベースに入れておく。
で、1分毎にそのデータベース内のレコードを確認して取得から1分以上になっていたら
削除する。
でもイマイチな仕様ですね。これじゃ。ああ。もっといい方法があると思うのですが。
0340nobodyさん
2006/06/08(木) 18:11:51ID:MZDW6IYK残った数値に1を足したいんですがうまくいきません
$line="hoge100";
$line =~ s/hoge//;
$line=$line+1;
print $line; 何も表示されない
どこが悪いんでしょうか、お願いします。
0342nobodyさん
NGNG0343nobodyさん
2006/06/08(木) 18:43:37ID:???とりあえず
$line='101';
print $line;
で表示されるかどうか確かめることをお勧めする。
0344nobodyさん
2006/06/08(木) 19:00:59ID:???セミコロンの後ろにある全角空白を削除すれば動く
0345nobodyさん
2006/06/08(木) 19:43:03ID:iBH9Xn1Cここ閲覧者数がでますが、これをperlCGIで実現する方法はわかる方いますでしょうか?
0346nobodyさん
2006/06/08(木) 19:52:07ID:???ただこれだけですよ
0347nobodyさん
NGNG0348345
2006/06/08(木) 20:02:06ID:iBH9Xn1Cそれで1分たったらどうするんですか?
cronとかで1分毎に削除CGIを動かすとかですか?
例えば今自分のサイトのどこに何人いるかを確認できるようにするには、
CSV形式で
1.IPアドレス
2.パスインフォ?でしたっけ
3.リクエスト時刻(秒単位)
でやって毎回誰かがアクセスしてきたらそのCSVのIPで正規表現、重複しないように更新をやって、
削除はcronで別CGIを動かして3のリクエスト時刻が既定タイムを超えてたら
削除。
1分毎にcron起動ってなんかあれですね。
訪問者が来た時に削除プログラムも動かす方がスマートですかね。
と考えてみて一応できそうですが、やり方が下手なような気もします。
指摘などありましたらお願いします
0349nobodyさん
NGNG0350345
2006/06/08(木) 20:10:23ID:iBH9Xn1Cありがとうございます。
とりあえず徹夜で作ってみます。
強制的に訪問者に話かけることができるサイトを。
0352nobodyさん
2006/06/08(木) 20:28:53ID:???0353nobodyさん
2006/06/08(木) 21:03:01ID:???print FILE, @stream;
close(FILE);
みたいにして簡単に配列の中身をtest.datに書き込みたいんですが、
エラーになってしまいます。
やっぱり配列をループ回して一行ずつ書き込んでいくしかないんでしょうか。
アドバイスよろしくおねがいします。
0354nobodyさん
NGNGコンマイラネって書いてあるだろ
0355nobodyさん
2006/06/08(木) 21:08:05ID:???回答を求めてないと思われてもしょうがないな...
0356nobodyさん
2006/06/08(木) 21:13:05ID:???ありがとうございます。
0357nobodyさん
2006/06/08(木) 21:17:23ID:???0358nobodyさん
2006/06/08(木) 23:57:04ID:???書き込み禁止の読み込み限定にしたいんですが
0360358
2006/06/09(金) 00:10:31ID:CHuIt143日本語とは?
0361nobodyさん
NGNG古来日本民族が用いてきた言語で、日本国の公用語。
北海道から沖縄までの島々にわたり、一億余の人々に使用されている。
音韻面では、一つの子音と一つの母音との結合音節を基調とし、
母音で終わる開音節を特徴とする。「ガ・ッ・コ・オ(学校)」という発音にも見られるような
等時的なリズム上の単位、すなわち拍(モーラ)をもち、高低アクセントを伴う。
文法面では膠着語(こうちやくご)に属し、助詞・助動詞が文の成立について
大きな役割を果たしており、また、述語が文の最後にくるという文法構造をもつ。
複雑な敬語法が発達していることもその特徴の一つに数えられる。
中国語から借用した漢字と、漢字を母胎として成立した仮名との併用で表記されるのが普通である。
語彙(ごい)には日本固有の語である和語のほかに、漢字音に基づく漢語も多い。
近年は、西欧語からはいってきた外来語も多く用いられる。国土の面積の割には、
方言による違いも著しく、男女や職業などの別による用語差も大きい。
系統はアルタイ諸語の一つに属するものか、などとも言われるが、いまだに定説とはなっていない。
0363nobodyさん
2006/06/09(金) 10:11:56ID:???0364nobodyさん
2006/06/09(金) 15:58:08ID:???if(!open(FH, "< $file1")){&file_err;};
flock(FH, 2);
@DATA = <FH>;
close(FH);
# @DATAの処理。
if(!open(FH, "+< $file2")){&file_err;};
flock(FH, 2);
seek(FH, 0, 0);
print FH @DATA;
truncate(FH, tell(FH));
close(FH);
で良いんですよね?
とすると、$file1から読み込んだデータを処理した後再び$file1に上書きする場合、
上の$file2の部分を単純に$file1にすれば良いんでしょうか?
それとも処理の前にクローズするのはマズイんでしょうか?
0365nobodyさん
2006/06/09(金) 17:45:02ID:???file2をそのままfile1にすると、ロックが効かない典型。
http://web.archive.org/web/20040216083853/www98.sakura.ne.jp/~jun/perl/flock.html
0366nobodyさん
2006/06/10(土) 01:04:27ID:???↑こういう書き方を誰が広めてるの?
open FH, "+< $file2" or file_err();
のほうが自然言語に近くて読みやすいしタイプもすくない。
0367nobodyさん
2006/06/10(土) 01:06:14ID:???0368358
2006/06/10(土) 01:10:25ID:fHtGRC+E書き込み禁止の読み込み限定にしたいんですが
0370nobodyさん
2006/06/10(土) 01:30:58ID:???open(FH, "file") or do { a(); b(); };
とかなってキモス。
0371358
2006/06/10(土) 01:49:00ID:fHtGRC+EたんなるHTMLのみだと
JaneStyleで読みこめません
かちゅでも読みこめません
0372nobodyさん
2006/06/10(土) 01:54:26ID:???or ( a() , b() ); でもいかね?
>>371
その2ちゃんブラウザのデータのフォーマット見ればどうすればいいのかわかるじゃん。
何がわかんないかさっぱりわかんないから相手にされないんだよ。 現時点じゃ perl の話題とも思えないしな。
0373nobodyさん
2006/06/10(土) 02:34:33ID:???動く動かないの問題じゃなくて、
open($io, "./3/2/1/0/0/321001056131731037.dat") or ( $obj->method_a() , $obj->method_b() , $obj->method_c() , $obj->method_d() , $obj->method_e() );
位になるとどこで折り曲げるか悩むだろ。
0374nobodyさん
2006/06/10(土) 02:45:21ID:???なるほ。 まあそれはいくらなんでもそりゃ if 文使うだろーね。
あるいは前もって無名サブルーチン作っておいて、そこでまとめて処理するとかかな。
0375nobodyさん
2006/06/10(土) 03:03:50ID:???open $io, "./3/2/1/0/0/321001056131731037.dat"
or $obj->method_a()
and $obj->method_b()
and $obj->method_c()
and $obj->method_d()
and $obj->method_e();
しかしこんぐらいなら別のサブルーチン作るかも
0376nobodyさん
2006/06/10(土) 03:06:37ID:???or map { $obj->can("method_$_")->($obj) } (a..e);
とか。この場合ね。
0377nobodyさん
2006/06/10(土) 03:13:25ID:???0378nobodyさん
2006/06/10(土) 03:20:09ID:???0379nobodyさん
2006/06/10(土) 03:32:05ID:???0380358
2006/06/10(土) 03:35:54ID:YyFvvuc/書き込み禁止の読み込み限定にしたいんですが
0382358
2006/06/10(土) 04:01:25ID:YyFvvuc/たんなるHTMLのみだと
JaneViewで読みこめません
ギコナビでも読みこめません
0383nobodyさん
2006/06/10(土) 04:11:44ID:???0384nobodyさん
2006/06/10(土) 04:13:02ID:???use strict;
my $fuge = 'fuge';
my $run1 = \&Hoge::fuge::run;# 通る
$run1->();
my $run2 = \&{"Hoge::${fuge}::run"};# 通る
$run2->();
my $str = \${"Hoge::${fuge}::str"};# エラー
print $$str;
exit;
package Hoge::fuge;
use strict;
$Hoge::fuge::str = '++++++++++++++++++++++',"\n";
sub run { print '-----------------------------', "\n"; }
上で、$str が通らないのはわかるけど、$run2 が通るのは何でなのかな?
0385nobodyさん
2006/06/10(土) 04:52:18ID:???use strict;
(\&{"test"})->();
exit;
sub test{ print "hello, world!"}
って、こんなのも通るのね…。
0386nobodyさん
2006/06/10(土) 05:05:09ID:???0387nobodyさん
2006/06/10(土) 06:17:24ID:???ttp://search.cpan.org/~nwclark/perl-5.8.8/lib/AutoLoader.pm
| There is one exception to this rule:
| | $bar = \&{'foo'};
| | &$bar;
| is allowed so that goto &$AUTOLOAD would not break under stricture.
0388nobodyさん
2006/06/10(土) 06:30:15ID:???http://search.cpan.org/~nwclark/perl-5.8.8/lib/strict.pm#DESCRIPTION
0389nobodyさん
2006/06/10(土) 07:23:45ID:???( ・∀・)シ∩<へぇーへぇーへぇー
先生方さすがです。
0390nobodyさん
2006/06/10(土) 15:22:30ID:+aR8vdDYshtmlにしないとSSIディレクティブはできないんでしょうか??
0391nobodyさん
NGNG0392nobodyさん
2006/06/10(土) 15:24:45ID:???perlと何の関係もないな。
スレ違い。
0393nobodyさん
2006/06/10(土) 15:25:38ID:???<input name="NAME" type="hidden" value="hoge">
というタグを送信元のページに入れておき、
それをcgiの中で、別の変数に移す時、
$hage = $FORM{ 'hoge' };
と記述したのですがうまくいきません。
記述が間違っていますか?
0394390
2006/06/10(土) 15:28:43ID:+aR8vdDYカウントダウンのCGI作ってたもんで
0396nobodyさん
2006/06/10(土) 15:43:39ID:???某サイトからダウソしたcgiファイルに、FORMで受け取った内容を
>>393の記述で使っている部分があったんで、これでおkと思ってますた。
で、今そのcgiファイルの中に>>393の記述でおkにする部分(らしきもの)を見つけたんで、
それを処理の一番上に持ってきたら思い通りに動作しました。
ありがとうございます。
0397nobodyさん
2006/06/10(土) 16:59:32ID:???まあ最初は自分もそうだったけどw
0398nobodyさん
2006/06/10(土) 17:21:59ID:???いろんなところから切り貼りして汚い…('A`)
誰にも見せられない…
0399nobodyさん
2006/06/10(土) 21:50:32ID:???0400nobodyさん
2006/06/10(土) 22:06:47ID:???0401nobodyさん
2006/06/10(土) 23:02:04ID:???0402nobodyさん
2006/06/10(土) 23:30:24ID:???0403nobodyさん
2006/06/10(土) 23:52:59ID:???0404nobodyさん
2006/06/11(日) 01:30:03ID:???そんな、へんてこで読みにくいスクリプトなんて。
use strictを使えばいいのに。ふぅ。
だから、絶対見てないって!
0405nobodyさん
2006/06/11(日) 01:44:54ID:???#!/usr/local/bin/perl
どかーん!
(⌒⌒⌒)
||
/ ̄ ̄ ̄ ̄ ̄\
| ・ U |
| |ι |つ
U||  ̄ ̄ ||
 ̄  ̄
もうおこったぞう
0406nobodyさん
2006/06/11(日) 01:52:53ID:???0407nobodyさん
2006/06/11(日) 01:55:40ID:???0410nobodyさん
NGNG別に使わなくていいと思う
0411nobodyさん
2006/06/11(日) 02:12:30ID:???( ,_ノ` ) n 私に質問するんですか?
 ̄ \ ( E) だったら答えてあげますよ!
フKENT /ヽ ヽ_// 初心者にも簡単!
文字化けは回避できるわ鯖落ちは回避できるわ
とりあえず使っとけな雰囲気があるわで大騒ぎ!
0412nobodyさん
2006/06/11(日) 02:15:31ID:???>409さんが書いている通り
ただ、他のページからデータを持ってこようとしたり、自分の管理外の色んなページから
GET・POSTを受ける場合は文字コード変換が必要
0413nobodyさん
2006/06/11(日) 02:38:31ID:???0414nobodyさん
2006/06/11(日) 02:49:36ID:???0415407
2006/06/11(日) 03:18:44ID:???それはHTML内で
<Meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
としてあるのにEUCでデータを送ってくるブラウザもあるということですか?
EUCで送られてきたデータを
# $testにフォームから送られたデータが入ってるとする
print <<"HTML";
<html>
<head>
<Meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
$test
</body>
</html>
HTML
このように表示すると文字化けし、
それを回避するためにjcode.plで文字コードを変換する、ということでOKですか
>>412
それはURLエンコードのことではないんですか?
当方、簡単な掲示板を作っていて、jcode.plを使わなくても何の問題も無かったんで気になったんですが。
0416nobodyさん
2006/06/11(日) 03:41:11ID:???0417nobodyさん
2006/06/11(日) 03:47:49ID:???j(J)code でデータうけとったときに何でもかんでも変換してると半角カナで文字化けするので、
どうせ変換するなら method get だけにしとくとかのがいいと思った。
他のとこから post でデータ送ってくるのって一部を除いてイタズラ以外にないしな。
まあ get にするにしても utf-8 に対応してない jcode.pl じゃあんま役に立たないとは思うけど。
どうなんでしょうKENT様
0418nobodyさん
2006/06/11(日) 04:33:43ID:???0419nobodyさん
2006/06/11(日) 04:50:51ID:???私は、コードを決めておいて、文字コードが合わなかったら変換しないで、
エラーを出すように作ってる。
■ このスレッドは過去ログ倉庫に格納されています