Perlコーディング初心者質問スレ Part 42
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0855nobodyさん
2005/07/29(金) 20:10:25ID:???基本的なことって、ここ初心者スレだしw
まあ>>850で十分だとは思うが。
>>848
おまいは最低でもググッてから質問しろ。
「Perl サブルーチン 2つの配列」とかいくらでも調べようはあるだろ。
0856nobodyさん
2005/07/29(金) 20:33:41ID:???下記のようにサブルーチンに1個以上の配列のリファレンスを配列の形式で受け渡したいのですが
プロトタイプをどのように記述したらよいのですか。
hoge(); #引き数エラーにしたい。
hoge(@fuga1); #@fuga1のリファレンスを渡したい。
hoge(@fuga1,@fuga2); #@fuga1,@fuga2のリファレンスを渡したい。
hoge(@fuga1,@fuga2,...); #引き数として渡した配列のリファレンスを渡したい。
sub hoge(\@;\@\@); みたいなプロトタイプをサブルーチンを実行させる以前に宣言しておけば
いいのはわかるのですが、渡す配列変数の個数が決まっていない場合
どのように記述すればいいのかがわかりません。どうぞよろしくお願いします。
なお、プロトタイプ宣言せずに直接配列に参照演算子 "\" を使って代入すればいいのは分かっていますが
あえてプロトタイプでお願いいたします。
0858nobodyさん
2005/07/29(金) 21:08:26ID:???任意の個数をすっきり書く方法は用意されてないと思うが、
実用上は
sub hoge(\@;\@;\@;....)
の;\@を十分たくさん書いておけばいいんじゃないのかね。
美しくはないが。
0859nobodyさん
2005/07/29(金) 21:37:08ID:???できる方法があるのなら知っておきたいというだけです。
たとえば、各配列の要素の平均を求めてその総和を求める関数が欲しいとき
$sum = avr_sum @a1,@a2,@a3,@4;
とか書けたらいいなと思っただけです。
まあ、こう書けば代用できますけどね。
$sum = avr_sum \(@a1,@a2,@a3,@a4);
>>858
やっぱりそれしか方法がないですかねぇ。
0861nobodyさん
2005/07/29(金) 23:29:26ID:???>各配列の要素の平均を求めてその総和を求める
@a1 = (3,4,5);
@a2 = (5,6);
@a3 = (3,5,6,7);
@a4 = (3,2,3);
$sum = (3+4+5)/3+(5+6)/2+(3+5+6+7)/4+(3+2+3)/3
こういうことだから、十分じゃないよ。
0862860
2005/07/29(金) 23:44:40ID:???スマン。平均ってのを読み飛ばしてた。
まあでもプロトタイプにこだわらなくてもいくらでも方法があるからいいじゃないかと逃げ。
0863nobodyさん
2005/07/30(土) 00:24:25ID:???0864nobodyさん
2005/07/30(土) 00:30:00ID:???use LWP::Simple;
$content = get($url);
0865nobodyさん
2005/07/30(土) 00:58:41ID:???use LWP;
$content = LWP::UserAgent->new()->request(HTTP::Request->new(GET=>$url,HTTP::Headers->new()))->content();
0866nobodyさん
2005/07/30(土) 21:06:51ID:???http://pc8.2ch.net/test/read.cgi/php/1060009605/345-
にて 2ch 発の技術書企画が進行中です。
主に Web 開発・運営に付いてのノウハウが集められる予定です。
興味のある方・我こそはと思う方は一度覗いてみてください。
0867nobodyさん
2005/07/30(土) 21:20:13ID:???0868nobodyさん
2005/08/02(火) 12:03:21ID:???end_formはformの閉じタグを生成するはずですが、空のdivも同時に生成してしまいます。
これを生成しないようにするにはどう書いたらよいでしょうか?
0869nobodyさん
2005/08/02(火) 12:41:54ID:???ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
use CGI qw(-nosticky);
0870nobodyさん
2005/08/02(火) 19:16:16ID:+vXBtmaxCGIのデバッグをWinのローカルで行う方法というのはありますか?
0871nobodyさん
2005/08/02(火) 19:17:21ID:???0872nobodyさん
2005/08/02(火) 19:23:44ID:???0873nobodyさん
2005/08/02(火) 19:24:40ID:???ありがとうございます。
Apache for Win32というのを入れればいいんでしょうか?
これは入れると自宅のPCがWebサーバーになってしまったりするんでしょうか?
世界に公開されてしまうのですか?
0876nobodyさん
2005/08/02(火) 20:32:29ID:???0877nobodyさん
2005/08/03(水) 09:27:29ID:2+TF3q2O0879nobodyさん
2005/08/03(水) 11:20:50ID:???use warnings,use strictしてるときパラメータを受け取った変数を条件式に使うとき
わざわざdefinedしないといけないのが面倒です。。何か良い方法があったら教えて頂けないでしょうか?
0880nobodyさん
2005/08/03(水) 12:52:24ID:???0881nobodyさん
2005/08/03(水) 13:15:56ID:???手抜きしちゃいかんよ。
0882nobodyさん
2005/08/03(水) 14:13:16ID:???CGI.pmより軽いし、超快適。
0883nobodyさん
2005/08/03(水) 15:25:05ID:???0884nobodyさん
2005/08/03(水) 15:30:17ID:???0885nobodyさん
2005/08/03(水) 17:04:37ID:???0886nobodyさん
2005/08/03(水) 19:50:20ID:???use strict,warnings下でCGI.pmを使っているけど、問題が起きたことはない。
0888nobodyさん
2005/08/03(水) 20:17:15ID:???たとえばチェックボックスがチェックされなかった
ときのように、あるパラメタがそもそも送られてこないと
スカラーコンテキストのparamはundef返すので、
my $hoge = $query->param('hoge');
if ($hoge == 1) { ... }
とか書くと、use warnings下では Use of uninitialized value in 〜
が出るとかそういう話。もちろんundef返る可能性があるのに
手を抜いてるのがいけない。
0889886
2005/08/03(水) 20:24:57ID:???って書かないか?
0890nobodyさん
2005/08/03(水) 20:46:12ID:???0891nobodyさん
2005/08/03(水) 23:09:39ID:???0892nobodyさん
2005/08/04(木) 00:47:52ID:???CGI::Session を使用していて perl -w で実行すると
(in cleanup) Can't connect to data source , no database driver specified and DBI_DSN env var not set at /usr/lib/perl5/site_perl/5.8.3/CGI/Session/MySQL.pm line 131
というエラーが出てしまいます。
どのような原因なのでしょうか・・・
0893nobodyさん
2005/08/04(木) 01:44:38ID:???Can't connect to data source
no database driver specified
DBI_DSN env var not set
0895nobodyさん
2005/08/04(木) 15:30:09ID:???正規表現と文字列変換で鼻血でそうです。
PHP+mysqlでWEBフォームくらい作れるんですが、
今まで両方とも初見の情報です。
とりあえず基本だから、ということでガリガリ覚えようとしてるんですが、
これ、どんくらいの頻度で使う知識なんですか?
もしすげぇ複雑だけど、ぜんぜん使わないよそこ、みたいなあれだったら悲しい・・・
0896nobodyさん
2005/08/04(木) 15:32:53ID:???DBIがインストールされてないというエラーと思われ
windows環境という前提でいうと、
1.activeperlインスト
2.windowsのコマンドライン(cmd)からinstall DBI
3.windowsのコマンドライン(cmd)からinstall DBD-mysql
でDBIが入る。
0898nobodyさん
2005/08/04(木) 15:42:39ID:???俺はよく使うけど、使うときに調べればそれで十分だと思う。
けど、正規表現は面白くて好き。オライリーの詳細正規表現お薦め。
0899nobodyさん
2005/08/04(木) 15:54:47ID:Ako7Yv7qなるほど!
ちょっと安心しました。
オライリーってあの表紙が動物園みたいなやつですよね。
自分もネズミが表紙のperl本持ってます。
4000(これ、書式は%4dですかw)円は高かった・・
正規表現で一冊できちゃうとは・・・
今度探してゲットします。
ありがとうございます。
0900892
2005/08/04(木) 20:46:43ID:???レスサンクス。
DBI入ってるみたいです。SSHで確認しました。
phpMyAdminから見るとセッションのデータをちゃんとMySQLに入れてて
取得も出来ています。
-wオプションをつけなければなにも問題なくうごいてるので
どうしてこんなエラーになるのかまったくわからなくって・・・
↓こんな感じのモジュール組んでます
0901892
2005/08/04(木) 20:48:26ID:???use strict;
use CGI::Session qw/-ip-match/;
use DBI;
use CGI qw/:standard/;
use vars qw($dbh $session);
sub new {
my $pkg = shift;
bless{
userid => undef
},$pkg;
}
sub GetID {
my $self = shift;
my $sid = shift;
$dbh = DBI->connect('DBI:mysql:+++:localhost', '+++', '********') or die "DBI connect不可\n";
$session = new CGI::Session("driver:MySQL", $sid, {Handle=>$dbh});
if($session->param("userid")) {
$self->{userid} = $session->param("userid");
} else {
$session->delete();
$self->{userid} = "guest";
}
return $self->{userid};
}
0902nobodyさん
2005/08/05(金) 10:16:46ID:???%form = $query =~ /([^=&]+)=([^=&]+)/g;
この1行でも問題ありませんか?
0905nobodyさん
2005/08/06(土) 08:08:56ID:???use strictしているソースを見たことがないのですが
use strictするメリットって何なんでしょうか
0906nobodyさん
2005/08/06(土) 10:35:31ID:???0907nobodyさん
2005/08/06(土) 10:38:17ID:???全部perl信者の妄想だから
0908nobodyさん
2005/08/06(土) 11:50:04ID:???意図しない変数の使用をチェックしてくれる
意図しない裸のワードの使用をチェックしてくれる
意図しないシンボリックリファレンスの使用をチェックしてくれる
特に変数チェックは超重要。今やuse strictしないとコードがかけません。
0909nobodyさん
2005/08/06(土) 17:13:48ID:???頭の悪い人たちが書いたコードでつか?
0910nobodyさん
2005/08/06(土) 19:40:45ID:???0911nobodyさん
2005/08/06(土) 19:43:21ID:???たとえばここなんか有名ですが
ここのスクリプトはuse strictが無いので
勝手に記述して実行すると完全に就職されていないグローバル変数エラーが
山ほど出てきます
他にもアップローダで一番よく使われているなずるぼんアップローダや
あっぷっぷも勝手にusestrict記述して実行すると
山ほどエラーが出てきます
0912nobodyさん
2005/08/06(土) 19:55:08ID:???0913nobodyさん
2005/08/06(土) 20:22:06ID:???漏れもKヨNTでperlを習った口だ。
だが、そのせいで社会復帰がままならない。
KヨNTのスクリプトは今すぐ捨てろ!
全部捨てろ!
そして、奴の事はもう思い出すな。
0914nobodyさん
2005/08/06(土) 20:25:07ID:???0915nobodyさん
2005/08/06(土) 21:16:56ID:???一般人にはuse strictなんて関係ないし、
少しぐらいバグがあっても、文句言いつつ使い続けたりするだろうし。
世の中ってそんなもん。
0917nobodyさん
2005/08/06(土) 23:18:50ID:???0918nobodyさん
2005/08/07(日) 00:26:07ID:???0919nobodyさん
2005/08/07(日) 01:09:48ID:???localはダメですよね?
0920nobodyさん
2005/08/07(日) 02:34:49ID:???それはチェックコストを抑えるため?
CPANで配布されている多くのコードはuse strictしたままだよね。
私も仕事ではつけたままにしてます。
先頭に#が付加されてしまう事が多いですが。
0921906
2005/08/07(日) 14:54:03ID:???仕事なら付けたままのほうが良いかと。
0922nobodyさん
2005/08/07(日) 15:07:05ID:???0923nobodyさん
2005/08/07(日) 15:37:39ID:???0924nobodyさん
2005/08/07(日) 17:18:25ID:???0925nobodyさん
2005/08/07(日) 18:37:02ID:IqAoEAkrブログからRSSを取得してPerlで解析して、jsを出力し、
エントリー概要をhtmlに表示するスクリプトなのですが
open OUTPUT, ">./data/rss.js";
foreach my $item ( @{$rss->{'items'}} ) {
print OUTPUT<<TEXT;
document.write('<a href="$item->{'link'}" target="blank">$item->{'title'}</a>');
TEXT
}
そのブログのエントリー名にシングルクォートが使われると
document.write(' ');でかこんでる部分が、シングルクォートの中に
シングルクォートが入ってhtmlに出力されなくなります。
その問題を解決するにはどういったスクリプトを書けばよいでしょうか?
どうぞヨロシクお願いいたしますm(_ _)m
0926nobodyさん
2005/08/07(日) 19:12:33ID:???0928nobodyさん
2005/08/07(日) 20:47:44ID:???つーか、そういうウンコなの同居させるなら TT とか使えよ。
0929nobodyさん
2005/08/07(日) 21:48:36ID:???0930nobodyさん
2005/08/07(日) 21:54:39ID:???0931nobodyさん
2005/08/07(日) 22:40:40ID:lD997J78と、本題と全く関係ないレスを誇らしげにしてみる。
0932nobodyさん
2005/08/08(月) 01:19:14ID:t9fLm/wi初めてサブルーチンを使ったプログラムを作ったのですが、以下のエラーがでます。
syntax error at C:/Apache2/htdocs/login.cgi line 225, at EOF
225行目には_END_しかないのですが、何がいけないのでしょうか?
0933nobodyさん
2005/08/08(月) 01:24:36ID:???おそらく225行目より前で何か間違えてる。それより前の部分よくチェックしてみるといいかも知れない
0934nobodyさん
2005/08/08(月) 02:05:42ID:???_END_
__END__
0936nobodyさん
2005/08/08(月) 02:43:01ID:???0937nobodyさん
2005/08/08(月) 02:50:55ID:???0938nobodyさん
2005/08/08(月) 02:54:30ID:???0939nobodyさん
2005/08/08(月) 02:56:27ID:???0940nobodyさん
2005/08/08(月) 03:23:25ID:???0941nobodyさん
2005/08/08(月) 04:08:49ID:???AppConfigは@INCの中にないディレクトリ[/home/hoge/module]にインストールされているとします。
perl Makefile.PL --libs="/home/hoge/module"
のような感じで指定出来れば問題なくコンパイル出来るのですが
そのようなオプションはありますでしょうか?
0942nobodyさん
2005/08/08(月) 12:55:58ID:???require './cgi-lib.pl';
require './jcode.pl';
って動かないんですか?
モジュール使わないとダメ?
0943nobodyさん
2005/08/08(月) 12:58:28ID:???0944nobodyさん
2005/08/08(月) 15:11:51ID:???IEやFirefoxのポップアップ抑制機能にじゃまされないで出すようにするにはどのようにすればよいのでしょうか?
vectorなどのサイトではちゃんとダウンロードできるので、何かやり方がありそうなのですが・・・。
0945nobodyさん
2005/08/08(月) 16:00:00ID:???だまって @INC 増やせ。
>>942
動くよ。 スクリプトと同じフォルダに設置しれば?
>>944
zip とかならポップアップしなくても普通にページ移動 (location) すればページ切り替わらずにダウンロード画面になることを知らないのか?
そゆことで、Content-Type がしっかり (ダウンロードされるように) してれば、そのように動く。
0946nobodyさん
2005/08/08(月) 16:13:29ID:???まともな会話の仕方を知らないのか?
0947nobodyさん
2005/08/08(月) 17:02:15ID:???ダウンロードダイアログとポップアップ抑制は関係ないから。
ヘッダとしてContent-Dispositionを出力してみるよろし。
Content-TypeとContent-Lengthも合わせて出力することをおすすめする。
0948nobodyさん
2005/08/08(月) 22:07:27ID:???CGI でしこしこデータを吐いてもいいんだけど、サイズが大きいと色々問題が
出てくるので Location で飛ばす方がいいと思うぞ。
警告なしに飛ばすには色々条件がある。
・Location は必ず HTTP ヘッダで吐く。HTML の <meta> は駄目。
・Location よりも前に Status: 303 See Other を吐く。
メソッドが POST でなければ 302 Found も可。302 の方が対応ブラウザが多い。
これは現在のメソッドに関係なく Location を GET で回収しろという意味。
・Location には絶対 URI を指定する。
さらにこの URI のホスト部分と $ENV{'HTTP_HOST'} は一致させる。
IP アドレスでのリクエストとかもあり得るので必ずチェックすること。
・メソッドが HEAD ならボディは吐かない。
それ以外なら Location へのリンク (<a>) を含む HTML を吐く。
これらが満たせない場合は <form> でのリクエストはあきらめるしかない。
<a> で CGI にリンクすれば回避できるけど、検索エンジンに侵されるのでそのつもりで。
0950nobodyさん
2005/08/09(火) 00:23:13ID:pZHbukIk#! c:/perl/bin/perl
print "Content-type: text/plain\n\n";
print "Hello Perl !";
これって普通ならブラウザー画面に文字が表示されるはずなのに
何故か実行するとファイルダウンロードになるのですが
何故でしょうか
0951nobodyさん
2005/08/09(火) 00:28:33ID:???でアクセスしてる?
0952nobodyさん
2005/08/09(火) 00:30:11ID:pZHbukIkまあローカルホストに違いないが
http://127.0.0.1/です
0953nobodyさん
2005/08/09(火) 00:31:06ID:???conf
0954nobodyさん
2005/08/09(火) 00:33:03ID:pZHbukIkやはりファイルダウンロードになりました
レンタルサーバーのほうは何故か不安定で、ローカルだと表示できるものが、
表示できたり出来なかったりします
パーミッションやパス、その他設定はちゃんとしてるはずなのに
レス数が950を超えています。1000を超えると書き込みができなくなります。