Perlコーディング初心者質問スレ Part 56
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/16(日) 19:49:43ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん
2007/09/16(日) 19:51:29ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
0003nobodyさん
2007/09/16(日) 19:52:04ID:???[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
00041
2007/09/16(日) 19:56:03ID:???0005nobodyさん
2007/09/16(日) 20:04:09ID:???お疲れ様です。
前スレ最後に質問してしまいました。
こちらに再投稿させていただきますm(__)m
use Math::BigFloat;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
と書くの大変なので
my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));
と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。
簡単な記述方法はないでしょうか。
0006nobodyさん
2007/09/16(日) 20:22:00ID:???use bignum
0007nobodyさん
2007/09/16(日) 20:40:18ID:??????
どういうことですか?
英語読めませんが、http://perldoc.perl.org/bignum.html を見てやったところ
全くMath::BigFloatが不要になってしまいました。
冒頭でuse bignumをしておけば小数点の変な誤差が発生することは皆無になるんですか?
代償として重くなるとかがあるので、軽くしたいなら面倒でもMath::BigFloatを使えばいい。
簡単にしたいならbignumを使えばいい?
0008nobodyさん
2007/09/16(日) 20:56:51ID:???my $tr = (@array * (1-0.68)/2);
メチャクチャな計算になりました。
@arrayは100なので16になるべき計算なのに50が入ってました。
もちろんbignumをつかわなければ16が入ります。
bignumを使うと他にも多大な影響があるようですね。
どういう基準で影響を与えてくるんでしょうか。
0009nobodyさん
2007/09/16(日) 21:58:06ID:???$#test
で最後の添え字をゲット。
0010nobodyさん
2007/09/16(日) 23:09:56ID:???再現しない。再現する最小コードは?
use strict;
use warnings;
use bignum;
my @array;
$array[99] = 0;
print scalar(@array), "\n"; # 100
my $tr = (@array * (1-0.68)/2);
print "$tr\n"; # 16
0011nobodyさん
2007/09/16(日) 23:24:10ID:???#!/usr/bin/perl
#京
#use bignum;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
これでできると思います。EUCコードで記述されています。
use bignum;をコメントアウトするかしないかで表示が変わります。
本来とは違う挙動をしているのでしょうか?
0012nobodyさん
2007/09/16(日) 23:35:36ID:???print 1;
というのが何千行もあった場合
print FH 1;
とやりなおすのは間に色々な式が挟まってる為一括ではできません。
標準出力先をファイルハンドルに変える設定などが冒頭でできるなら一発でできると思うのですが。
0013nobodyさん
2007/09/16(日) 23:36:59ID:???0015nobodyさん
2007/09/17(月) 00:17:12ID:???俺のとこだと再現しないわ。環境は
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
This is perl, v5.8.8 built for cygwin-thread-multi-64int
0017nobodyさん
2007/09/17(月) 00:44:08ID:???This is perl, v5.8.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
5.8.1のみの問題ですかね?
そんなに違いがあるのでしょうか。
一体何なのでしょうか?
ちなみにbignumって何に使うためのものなのですか?
浮動小数の誤差関係に使えるというのは一つですよね。
本筋はそれですか?
だとしたらこんな影響が出てしまう理由がわかりませんし。
EUCコードでやっておられますよね?
それかもしかしたらbignumの方がバージョン変わってるとか?
0018nobodyさん
2007/09/17(月) 06:36:57ID:???1. 再現せず。きちんと計算される。
This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
2. bignum は BigFloat と Math::BigInt, Math::BigInt::Lite のラッパー
それぞれググレ。でかい方に関しては
perl -le 'print 2**2**2**2**2' # => inf
perl -Mbignum -le 'print 2**2**2**2**2' # => やってみ?
とか
perl -le 'print 10**16' # => 1e+16
perl -Mbignum -le 'print 10**16' => 10000000000000000
効能が分るだろ。
0019nobodyさん
2007/09/17(月) 07:36:15ID:???% cat Hoge.pm
package Hoge ;
use 5.005_02 ;
use vars qw( @ISA @EXPORT ) ;
use vars qw( $hoge ) ;
use subs qw( hoge ) ;
use Exporter ;
use Cwd ;
@ISA = qw( Exporter ) ;
@EXPORT = qw($hoge hoge ) ;
$hoge = 42 ;
sub hoge{ return 42 ;}
1;
% perl -Mstrict -Mwarnings -MHoge -le 'print $hoge; print hoge'
ってか朝っぱらから何やってんだろ俺。
0020nobodyさん
2007/09/17(月) 07:37:27ID:???0021nobodyさん
2007/09/17(月) 11:15:49ID:???-cは確か構文チェックをしてくれるわけですよね。
0022nobodyさん
2007/09/17(月) 11:37:55ID:???>84
print scalar(1..99);
>何も表示なし
print scalar(0,1,2);
>2
リストをscalarに渡すとどうなるかというのが知りたかったのです。
要素数を出してくるのか末尾要素だけ評価するのか。
真ん中のやつは何も評価しなかったようですが。何故なんでしょうか。
それとgrepでリストが作られるのかと思っていたら配列が作られているのですよね?これは。
scalar(配列) とすると要素数が出てきて
scalar(リスト) とすると末尾要素が評価される
scalar(n..m) とすると何も起こらない
grepの返り値は配列だということでokですか?
0023nobodyさん
2007/09/17(月) 11:46:15ID:???これをやらせるとIllegal division by zero at hogehogeと警告されます。
0/1
こっちは警告なしなので大丈夫なんだと思いますが。
あまり気にしてないと、無自覚のうちに0による除算が発生してしまうことってありますよね。
意識的に0による除算が行われないよう、例えば
my ($r,$p) = (rand,rand);
print $r/$p;
こういう場合は
my ($r,$p) = (rand,rand);
if ($p>0){ print $r/$p }
と保険?を掛けておくのが推奨されるコーディングなのでしょうか?
0024nobodyさん
2007/09/17(月) 11:56:26ID:???perl -w -le 'print scalar (1..99)'
Use of uninitialized value in range (or flip) at -e line 1.
range 演算子は、君の希望の挙動の他に
while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
つう風にも使う。で、上述ではperlの中の人がどっちの機能
を求めているのか判断出来ない。=> エラー出して保留
∴まともに機能してないよ
002522
2007/09/17(月) 12:16:00ID:???while( <> ){
print if ( /^\s+/ .. /^$/ ) ;
}
読めないorz
正規表現の部分は「先頭から空白文字が1個以上あるか」「中身が空であるか」の二つですね。
で、..この範囲演算子はどういう意味でしょう?
ついでにwhileの評価式自体が皆目検討がつきません。
0026nobodyさん
2007/09/17(月) 12:24:45ID:???例だからあまり意味のないものを書いたんで。。。
「先頭から空白文字が1個以上ある行」から
「中身が空であるか」まで
を出力せよ。
と言う意味になります。ホントは/^\S+/ のつもりだったのよw
後は、、、ぐぐれ。
002721
2007/09/17(月) 12:26:13ID:???Use of uninitialized value in addition (+) at 行数
こういうのやsubtractionとかがちょくちょく出てくるんです。
「初期化されてない値を使ってる」みたいな意味だと思いますが、
具体的にどういうエラーなのかわからず再現ができないでいます。
002822
2007/09/17(月) 12:32:34ID:???う〜んどうしてそうやって動くのでしょうか?
一旦中身が空である行を迎えたら自動でループはlastされるのですか?
ifに掛けられるのは1行ずつですよね。
う〜ん・・・
0029nobodyさん
2007/09/17(月) 12:37:27ID:???左の正規表現が真 => スイッチオン
右の正規表現が真 => スイッチオフ
for( 1..1000){
print $_ if $_ == 10 .. $_ == 100 ;
}
つかまじでググってくれ。
21氏は質問の意味自体が理解不能だ。
俺は消えるので、相手してくれる人はいなくなるかもしらんが
頑張れ
003021
2007/09/17(月) 12:38:16ID:???my $ze = $pl + 1;
my $we = $pl - 1;
レスこないのでガンばてたら、これでadditionとsubtractionエラーが再現できました。
この二つのエラーが出たら未定義値が格納されてる変数が計算に使われてるって思っておけばいいですよね。
でも一応スクリプト自体は動くんですが、-wはuse strict程度の感覚なのですか?
0031nobodyさん
2007/09/17(月) 14:45:52ID:???それ範囲演算子じゃないから。普通は使いません、ていうか使うな。
明らかに不適切な例を唐突に持ち出して何がしたいんだか。
0034nobodyさん
2007/09/17(月) 16:27:17ID:???31=21 か?
Programming Perl の P135 の範囲演算子の項を読んだ後に
まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
0035nobodyさん
2007/09/17(月) 18:09:34ID:???> まともに煽ってくれ。つか突っ込みどころは他にもあるんだから。
とりあえず、該当箇所をスキャンしてうp汁。
0036nobodyさん
2007/09/17(月) 18:24:44ID:???http://perldoc.jp/docs/perl/5.6.1/perlop.pod
の範囲演算子の項はほぼ上述書物と同じだ。
003722
2007/09/17(月) 19:13:34ID:???0038nobodyさん
2007/09/17(月) 19:21:59ID:???↓
> スカラの ".." の被演算子が定数表現であるときは、
> その被演算子は暗黙に、変数 $. と比較されることになります。
↓
ちょっくら$.と比較するか。
↓
$.にundef入ってるし。
↓
Use of uninitialized value
0039nobodyさん
2007/09/17(月) 20:57:51ID:???変な皮肉を言ったり、あえて言葉足らずにしてみたり。
そういう悪い癖に自分で気付いてるんだろうか。
こういうところが、「キモイ」イメージが付いてしまう原因なんだろうな。
0040nobodyさん
2007/09/17(月) 21:44:30ID:???0041nobodyさん
2007/09/17(月) 23:15:28ID:???0042nobodyさん
2007/09/18(火) 01:53:41ID:???0043nobodyさん
2007/09/19(水) 19:41:21ID:uZuxrlKvデバッグの仕方でつまづいています。
というのも CGI::Application の場合 ランモードのそれぞれのメソッドからブラウザに表示させたい
htmlを return しますよね?
で、その途中で 勝手に「 print $hensu; 」みたいにやっても画面上には表示されません。。。
もちろん「 return $hensu; 」とやればその変数の内容は表示されるのですが、複数の変数の値を
一度に表示させたいのですーー。
こんな時みなさんどうしてるのでしょう???
0044nobodyさん
2007/09/19(水) 19:47:18ID:???0045nobodyさん
2007/09/19(水) 20:52:24ID:???CGI::App::Plugin::DebugScreenとかLogDispatchとか使ってたっけかな
手っ取り早いのはData::DumperとかYAML使ってwarnでダンプとか
httpdのエラーログにね
0046nobodyさん
2007/09/19(水) 23:34:44ID:???http://search.cpan.org/perldoc?CGI::Application::Server
http://search.cpan.org/perldoc?CGI::Application::Dispatch::Server
0048nobodyさん
2007/09/20(木) 00:36:25ID:FmGzC+A0プリペアードステートメント使っていますが、肝心の値の部分が「?」なので、実際に流れるクエリが分かりません。
0049nobodyさん
2007/09/20(木) 09:16:22ID:???http://search.cpan.org/~timb/DBI-1.59/DBI.pm#trace
>DBI->trace($trace_setting)
>DBI->trace($trace_setting, $trace_filename)
>DBI->trace($trace_setting, $trace_filehandle)
>$trace_setting = DBI->trace;
0050nobodyさん
2007/09/20(木) 12:35:47ID:yNzQPcIL>>45
43です。レスありがとうございます。
なるほど、簡単にはいかないんですね。。CGI::Applicationしょぼ!
結局グローバルな変数(ハッシュ)に変数の値を保存していって
cgiapp_prerun (メソッド名間違ってたらスマソ)でその変数に
値が入っていればブラウザに表示するという方法でいきます。
ていうかこれぐらいのこともできないのかよ。CGI::Application
0051nobodyさん
2007/09/20(木) 13:40:05ID:???自分の無知を認識しろよ
0052nobodyさん
2007/09/20(木) 13:45:10ID:???0053nobodyさん
2007/09/20(木) 14:21:55ID:???0054nobodyさん
2007/09/20(木) 19:18:46ID:???どこのレンタルサーバでも使えるような方法で頼む。
0055nobodyさん
2007/09/20(木) 21:46:49ID:???0056nobodyさん
2007/09/20(木) 21:49:39ID:???0057nobodyさん
2007/09/20(木) 21:50:20ID:???値は PATH_INFO とかでとればよい。
0058nobodyさん
2007/09/21(金) 04:57:02ID:9/Wk3rtwネットに落ちてるサンプルを見ながら、アクセス解析や掲示板などを書いて
練習しているのですが、データを書き込んでいく空ファイルは
どこのサンプルでも自前で事前に用意しています。
これを、日時ごとに070921.dat、070922.dat…のように自動生成させたいのですが、そのようなことは出来ないのでしょうか?
よろしくお願いします。
0059nobodyさん
2007/09/21(金) 05:11:32ID:???0060nobodyさん
2007/09/21(金) 05:15:49ID:???SSIが使えないならば、直接CGIにアクセスさせるしかないんでしょうか??
0061nobodyさん
2007/09/21(金) 09:28:25ID:???GDでファイルを生成→表示というスクリプトを組んでいますが
どうやら生成されるまえに表示する処理が実行されてしまい。うまくいきません。
リロードすれば表示されるようにはなるのですが・・・
生成されるまで待つ→表示処理実行
という事を考えて生成→slepp 2とか10;→次を実行
と、してみましたがうまくいきません。
生成完了するまでウェイトをかける方法を教えていただければありがたいです。
よろしくお願いします。
006261
2007/09/21(金) 09:35:31ID:EZVVl+6IsleepでOKでした。
よくみると
コメントアウトしてましたw
0064nobodyさん
2007/09/21(金) 20:24:02ID:yGE03KVM例えば print 1; という命令のあるplファイルをダブルクリックしても1が表示されません。
いや正確には一瞬何かが出てきてるっぽいんですが、閉じるの早すぎです。
コマンドプロンプトから実効命令をするとprint先がコマンドプロンプトに来るので、
勝手に閉じることはないようですが。
いちいちコマンドプロンプトやらずに簡単なコードテストの時はダブルクリックで済ませたいのですが
方法ありましたら教えてください。
006664
2007/09/21(金) 21:00:38ID:yGE03KVMありがとうございます。
うまく出ました^^
endって一体なんなのですか?
perlの説明サイトとかで関数調べてendありませんし。
最後にやるってことですか?
となると<STDIN>が閉じさせない命令の本体になるんでしょうか?
どういう理屈なんでしょうjか。
0067nobodyさん
2007/09/21(金) 22:37:24ID:???http://perldoc.jp/docs/perl/5.8.8/perlmod.pod
perlmodのBEGIN, CHECK, INIT and END BEGIN CHECK INIT ENDのところ。
プログラムの終了するところで、
<STDIN>で、コンソールの入力待ちをしてる。
006864
2007/09/21(金) 23:02:02ID:yGE03KVMコンソール???あの黒い画面のことかな。
で、試しに適当に打ち込んだら本当に入力できました。
最後にenterを押したら画面が消えました。
perlの方にはしっかりとその内容が送られてるんですかね?
試しに
my @array = <STDIN>;
print $array[0];
としてみましたが、今度はenterを何度押しても画面が閉じません。
配列に入れてるから無限に取るっぽいですね。
my $scalar = <STDIN>;
print $scalar;
END{<STDIN>}
としたらうまくいきました。
任意の内容を入力してenterした瞬間に制御が一瞬コードに行ってprint $scalar;が実行されました。
ローカルでやるときはこうやって引数を取るというのも面白いですね。
物凄い面白いことを教えていただいて感謝です。
0069nobodyさん
2007/09/22(土) 13:27:49ID:???Class::DBI使ってDB操作する場合、二つのレコード間で主キー以外のデータを交換するには
どのように書いたらいいですか?
0070nobodyさん
2007/09/22(土) 15:58:05ID:???print "content-type:text/html\n\n";
print "<html>\n";
print "<head><title>タイトル</title></head>\n";
print "<body>\n";
print "<h2>テスト</h2>\n";
print "</body>\n";
print "</html>\n";
↑これでInternal server error 500になる。
ただしレンタルサーバー上ではエラーだが、
自分のパソコンでやったらちゃんと表示される。
ソースにもし間違いがあったら
場所と対処法を具体的に指摘しろ。
0071nobodyさん
2007/09/22(土) 17:15:55ID:???態度でかいぞ。
そんなやつには教えてやらん。
#! と /usr の間に半角スペースが入ってるのが問題とか言わん。
007369
2007/09/22(土) 19:54:58ID:???0075nobodyさん
2007/09/22(土) 22:09:17ID:VEv2R0s3http://ws.strikeiron.com/SwanandMokashi/StockQuotes2?WSDL
このサービスを SOAP::Lite から使いたいんですが、ドキュメントのWSDL関連部分を読んでも
use SOAP::Lite;
print SOAP::Lite
-> service('http://www.xmethods.net/sd/StockQuoteService.wsdl')
-> getQuote('MSFT');
としか書いてません。
WSDLを見てみると、GetStockQuotesメソッド(オペレーション?)のパラメタとして
QuoteTicker(MSFTとかの文字列)だけでなく、オブジェクト構造みたいなのを組んで
メアドなども渡さないといけないようなんですが、どう書けばいいんでしょうか。
007675
2007/09/22(土) 22:43:31ID:???> SOAP::Liteでは今のところWSDL 1.1のサポートは限定されているが〔中略〕、
> 複雑な型(types)を記述に含まないサービスにはアクセス可能だ。
と書いてあるので、無理なのかもしれませんね・・・
007775
2007/09/23(日) 03:01:09ID:???http://wsparam.strikeiron.com/BasicRealTimeQuotes?WSDL
という、もっと単純なWSDLを使用。
http://www.strikeiron.com/authentication/
ここの下のほうにPerlのサンプルが(も)置いてあるので、それを改造。
わかりやすいのでSOAP初心者にはおすすめかも。
0078nobodyさん
2007/09/23(日) 03:53:09ID:???なぁーんてこった!
cgiファイルのパーミッションを
755にしたらそれで動いたぜ
そんなこと教科書には
どこにも一言も書いてなかった!
ローカルで動かす教科書だからかな?
サノバビーィーーーッチ!
それでパーミッションが500でも
動くのはなんでだ?
0079nobodyさん
2007/09/23(日) 05:27:46ID:???0080nobodyさん
2007/09/23(日) 06:45:28ID:???0081nobodyさん
2007/09/23(日) 06:53:38ID:???なんか、すごくレベルの高い質問が最近多すぎな気がする。俺のレベルが低いだけなんだろうけどw
Webprogなんだから、動けばいいじゃない的な考えがイクナイ?
0082nobodyさん
2007/09/23(日) 07:50:40ID:???って感じで書いて$mogeが展開されてくれないみたいなんだけど、
特別な書き方があるのかな。
ぐぐったけど正規表現ばかりで、変数をつかってる例が全然見つからなかったんだけど、
こういう記述方法自体があまり一般的じゃなくて、他の書き方があるのかな。
教えてちゃぶだい。
0085nobodyさん
2007/09/23(日) 14:57:13ID:???quotemetaでいけたよ。
1)index($hoge, $moge) でもやったけどダメ
2)auotemeta() してみた
3)$hoge =~ /$moge/ で成功!
4)でもなぜかそれ+ index($hoge, $moge) じゃダメ
って感じだった。
中に入ってるのはどちらもEUCの2バイト文字列なんだけど、
なぜか$mogeが空の文字列として扱われてしまってるっぽい動作だった。
print $hoge.$moge;とかで出力するとちゃんと出力されるんだけどね。
良く分からないけどとりあえず解決はしてよかった。
ありがとう。
0086nobodyさん
2007/09/25(火) 00:47:19ID:XOfpdsF8use strict;
use diagnostics;
という宣言をした状態で、
Name "html::copyright" used only once: possible typo at bbs.cgi line 554 (#1)
というwarningが出ました。
html::copyrightは、htmlモジュール で、
$copyright = 'hogehoge ';
などというように、宣言されています。
warnings は、他のモジュールの変数は見てくれないのでしょうか?
実は、html::copyright 以外にも数十個でていて、紛らわしいことこの上ないです。
(他のwarningにも混じってしまい、識別が困難です)
このwarningをつぶしたいのですが、何とかする方法はないでしょうか?
0087nobodyさん
2007/09/25(火) 00:49:11ID:XOfpdsF8o 実は、html::copyright 以外にも used only once: possible typo が、数十個でていて、紛らわしいことこの上ないです。
used only once: possible typo・・・
は、意味は、わかっておりまして、
一度しか使ってないので、ミスじゃない?ってことなのですが、
実際には、ちゃんと、htmlモジュールで代入してから、mainで参照しているのに・・・ということです。
0088nobodyさん
2007/09/25(火) 03:43:51ID:???Use of uninitialized value
が続かないなら、理由が分からない。
一度ourで宣言してみたらどうなる?
008986
2007/09/25(火) 17:25:00ID:XOfpdsF8-----test_pm.pm-------
package test_pm;
use strict;
use warnings;
our $hoge = "test foo bar";
1;
-----main.pl---------
use strict;
use warnings;
use test_pm;
print $test_pm::test;
-------------------
> perl main.pl
Name "test_pm::test" used only once: possible typo at main.pl line 5.
Use of uninitialized value in print at main.pl line 5.
ちゃんと、Use of uninitialized value でて、実行不能でした orz
ourでも、myでも同じでした
>>86は、CGIなんですが、なんで、ちゃんと動いているんだろ・・・
もうちょっと解析してみます。
009086
2007/09/25(火) 17:28:00ID:XOfpdsF8o print $test_pm::hoge;
スペルミス。
これでも同じ結果です。
0091nobodyさん
2007/09/25(火) 21:26:37ID:o7XeBw4vEND{<STDIN>}
を教えてもらったものです。その節はありがとうございました。
ローカルチェックをする時に、ダブルクリックだけでいいという大変便利なものなのですが、
エラーが出てるときに一瞬で画面が閉じてしまうのです。
ちなみにその時のエラーはuse strictによるmy使え先刻でした。
途中でエラー中断してるのでEND{}まで行かないのは至極当然な話ですが、
エラーの時はエラー内容をSTDINに出力させりょうと思うと大変なことになりますか?
エラーにも色々あるので難しいかもしれませんが、用はコマンドプロンプト画面に出ることを
代わりにそのままSTDINに出力してもらえばいいわけなのですが。
0092nobodyさん
2007/09/25(火) 21:28:39ID:???CGIってことはサバにあるわけだ。
つまり君がローカルで試してるファイルとは違うファイルが動いてる可能性もあるわけね。
009491
2007/09/25(火) 22:20:58ID:o7XeBw4vいえ、単純にちょっとしたコードテストをしたいときにわざわざ
1.コマンドプロンプト画面を開いて
2.ファイルがあるフォルダを開いて
3.黒画面にファイルをD&Dしてenter
という手順を踏むのが面倒だといつも思っていたのです。
1.ファイルをダブルクリックする
これだけで済むなら最高です。
意外に大きな差かなって思いまして。
黒画面へのエラー内容出力ってどういう仕組みで行ってるんでしょうか?
きっとperlの方から出してるんだと思いますが、その出し先をSTDINに変えればできるのでは?
とか思ったり。
0095nobodyさん
2007/09/25(火) 22:46:42ID:???同じファイル?ならコンソール開きっぱなしで1回目だけ「perl スクリプト名」で実行しておけば連続テストは↑+Enterで済む。
慣れにもよるけど多分ダブルクリックより速く操作できる
エラーはSTDERRに出力される。
誤解しているようだけどSTDINは標準入力であって出力ではない。標準出力はSTDOUT
009691
2007/09/26(水) 00:17:27ID:zmZEFb0X2回目以降は確かに楽なんですけど。
STDERRに出力されてるので、END{<STDIN>}で出る入力受付画面には出力されない?
STDOUTへの分はきちんと表示されますし。
STDERRの取得方法があるのでしょうか?
0098nobodyさん
2007/09/26(水) 00:37:06ID:???ラクダ本より
>内部的に発生する例外によって終了する場合でも、ENDサブルーチンは呼び出される(ただし、シグナルによって撃沈された場合は除く)
とあるようにENDそのものが実行されない。自分で(できれば)トラップする必要がある。これはsigtrapを使えばよい。
…が、それくらいなら最初からコンソールから使うことを強く勧める。元々ダブルクリックで起動するようには設計されてないし。
0099nobodyさん
2007/09/26(水) 00:41:02ID:???echo off
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
みたいなバッチファイル作って、,plに関連付けして置くぐらいかなぁ。
統合型開発環境(みたいなエディタ)を使うと、その場で実行して、
その場で結果表示できたりするので、そういうの使うと便利だよ。
0100nobodyさん
2007/09/26(水) 00:56:23ID:???> perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
は
> perl %1 %2 %3 %4 %5 %6 %7 %8 %9
だた。
0101101
2007/09/26(水) 02:22:27ID:???教科書を今日読んで理解したので
型グロブについて誰か質問してください。
説明します。
■ このスレッドは過去ログ倉庫に格納されています