Perlコーディング初心者質問スレ Part 58
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/08/06(水) 22:54:32ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0798nobodyさん
2009/02/04(水) 11:33:59ID:???unshift(@a , 1);
第二引数は配列でアレ!
0799nobodyさん
2009/02/04(水) 21:14:31ID:???> この表記でバグってるような気がします
http://www.e777.co.jp/perlcw/perlcw.html
> ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
http://www.activestate.com/activeperl/
0800nobodyさん
2009/02/04(水) 23:10:49ID:???0801nobodyさん
2009/02/05(木) 07:17:41ID:???0802nobodyさん
2009/02/05(木) 09:39:18ID:???0803nobodyさん
2009/02/05(木) 10:22:36ID:???> strict.pmが鯖に必ずしも入っていなかったからだと思うよ
そういう鯖って今もあるの?
あるとして使う積極的な理由は見つからない。
use strict; しないスクリプトは消えるべきかと。
0804nobodyさん
2009/02/05(木) 10:33:23ID:???0805nobodyさん
2009/02/05(木) 10:37:35ID:???-Tオプション
use strict;
use warnings;
つけるけど、納品するときは外すよ
0807nobodyさん
2009/02/05(木) 11:20:17ID:???納品前に外す趣旨の発言は、この板で何度か出てきてるね。
外すと書くだけで、合理的な理由を示さない人だから、構わない方が良いよ。
0810nobodyさん
2009/02/05(木) 12:15:13ID:???http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。
varda.plの191
sub CreateSubback{ } 内に
require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);
151# HTMLヘッダの出力
$Caption->Print($Page,undef);
他に
sub META{
my ($this,$Page,$Caption) = @_;
my ($title,$link,$image,$code);
$Caption->Load($this->{'SYS'},'META');
}
ミスはないでしょうか?
0811nobodyさん
2009/02/05(木) 12:21:03ID:???お母さんのおっぱい揉みながら聞いてみるといいよ
0812nobodyさん
2009/02/05(木) 12:22:33ID:???0813nobodyさん
2009/02/05(木) 12:23:39ID:???0814nobodyさん
2009/02/05(木) 12:42:41ID:???0816nobodyさん
2009/02/05(木) 13:33:51ID:???0817nobodyさん
2009/02/05(木) 14:00:44ID:???http://d.hatena.ne.jp/lapis25/20090204/1233757194
両エントリktkr
0819nobodyさん
2009/02/05(木) 16:35:05ID:???> 可能性がゼロじゃないわけで。
これについて、何の可能性なのかよくわかんないんだよね。
>>801 でいう「strict.pmが鯖に必ずしも入っていな」い可能性がゼロなのか、
use strict; use warnings; したときに出てしまうメッセージを潰しきれない
のがゼロなのか。
> ログはきまくるっていうのもあるのかな
そもそも何のログが出てくるのかと。
use strict; use warnings; しているときに何か出てくるのであれば、
それは必ず潰さなければらなない。
そんなものが出てくる時点で何かおかしいことをしている。
例外的に、わかってておかしいことをしたい場合は、その箇所に関しては、
個別的に黙らせればよい。
0820nobodyさん
2009/02/05(木) 16:42:43ID:???0821nobodyさん
2009/02/05(木) 16:44:10ID:???外してもう一回テストやるの?面倒くさくない?
0822nobodyさん
2009/02/05(木) 16:49:06ID:???どのくらいの時間がかかるの?
ベンチとか取ってるのなら見てみたい。
0825nobodyさん
2009/02/05(木) 17:07:07ID:???1000 回まわしてトータルで 0.3 秒の差だね。
行数多くなると少し変わるんだろうけど、この小さな差をどうにかしないと
いけない状況って本当にあるの?
# --- run.sh
#!/bin/bash
time bash call_strict.sh
time bash call_no_strict.sh
$ bash run.sh
real 0m5.904s
user 0m3.828s
sys 0m1.824s
real 0m2.561s
user 0m1.116s
sys 0m1.784s
# --- call_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_strict.pl 2>/dev/null 1>/dev/null
done
# --- call_no_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_no_strict.pl 2>/dev/null 1>/dev/null
done
0826nobodyさん
2009/02/05(木) 17:07:48ID:???#!/usr/bin/perl
use strict;
use warnings;
my ($a, $b, $c);
$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;
# --- call_no_strict.pl
#!/usr/bin/perl
$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;
0827nobodyさん
2009/02/05(木) 17:17:53ID:???0828nobodyさん
2009/02/05(木) 17:54:21ID:???0829nobodyさん
2009/02/05(木) 18:33:37ID:???0830nobodyさん
2009/02/05(木) 18:39:27ID:???0831nobodyさん
2009/02/05(木) 18:41:08ID:???0832nobodyさん
2009/02/05(木) 19:56:17ID:???0833nobodyさん
2009/02/06(金) 01:05:07ID:???0834nobodyさん
2009/02/06(金) 02:46:43ID:???0835nobodyさん
2009/02/06(金) 03:03:25ID:???計測したことがないけど、warning.pmは重くてstrict.pmはほとんど負荷がない、とドキュメントに書いてあったと思う。
だから俺はuse strictして、-wオプション付きでテストさせている。
0836nobodyさん
2009/02/06(金) 03:09:28ID:???0837nobodyさん
2009/02/06(金) 09:50:05ID:???0838nobodyさん
2009/02/06(金) 12:54:45ID:???外して焦ってサポートに電話してくりゃ、そりゃ商機なんですよw
下手に改造されてワーニング放置で動かされて、とある日にぼろぼろのソースを直せと言われるより、
早期にワーニング出てもらって、修正依頼に対して「そちらが勝手に改造したので新規料金相当頂きます」のほうがいいんですよ
ちったぁ考えろって
0839nobodyさん
2009/02/06(金) 13:15:50ID:???「納品時には use strict; use warnings; を外す」
でよろしいな?
0840nobodyさん
2009/02/06(金) 13:27:58ID:???0841nobodyさん
2009/02/06(金) 14:26:30ID:???0843nobodyさん
2009/02/06(金) 14:58:25ID:???0845nobodyさん
2009/02/06(金) 15:22:58ID:???0851nobodyさん
2009/02/06(金) 15:37:21ID:???0853nobodyさん
2009/02/06(金) 16:29:24ID:???0ならば、登録フォームを表示させない。
1か0かは、管理人用ページから設定することができる。 という感じでPerlを組みたいのですが、
まだまだ初心者でよく分かりません。
一応、
<input type=radio name=bosyu value=1>表示する
<input type=radio name=bosyu value=1>表示しない
というフォームを作り、登録フォームの表示部分に、
if ( $bosyu == 1 ){
#登録フォーム
}
else {}
というようにしました。
しかし、管理人画面から1にしようが0にしようが、登録フォームはどのみち消えてしまいました。
この場合、どうしたらよいのでしょう?;
0854853
2009/02/06(金) 16:30:28ID:???正しくは、
<input type=radio name=bosyu value=0>表示しない
でした。申し訳ありませんが、ご教示願いますm(_ _)m
0855nobodyさん
2009/02/06(金) 16:36:45ID:???URLデコード的なものをしてないんじゃ?
0856nobodyさん
2009/02/06(金) 16:46:23ID:???ありがとうございます。m(。。;)m
URLデコード・・・ですか?今から検索かけてみます;
もしよろしければ、
http://www.77c.org/d.php?f=nk5918.lzh
に本体をアップロードしましたので、修正箇所など教えていただけますと助かります。
私自身が追加しましたのは、行381,行382,行678,行683,行684 になります。
0857nobodyさん
2009/02/06(金) 16:51:07ID:???0858nobodyさん
2009/02/06(金) 17:05:24ID:???ってやりたいなら明示的に int(入力値) ってやったほうがいい
でなけりゃ 0 or 1 じゃなくて TRUE or FALSE にして、eq を使うとか
0859nobodyさん
2009/02/06(金) 17:08:50ID:???ありがとうございます。
やってみましたが、やはり0,1に関わらず登録フォームが消えてしまいました;
>>858 さん。
ありがとうございます。
今からやってみたいと思います。
0861nobodyさん
2009/02/06(金) 17:33:20ID:???http://pc11.2ch.net/test/read.cgi/php/1143834740/
0862nobodyさん
2009/02/06(金) 17:36:41ID:???0863nobodyさん
2009/02/06(金) 19:09:08ID:???そんなこと無いだろうさすがに
と思ったけど、これは酷いw
$bosyu 自体読み込みしてないけりゃ、$bosyu じゃなくて bosyu とかなってる始末
ログにはコメントしか出力してないし、CGI 君はどうやって表示するしないのフラグを知ればいいの?
もっと流れを知ったほうがいい。
あと、このスクリプトは酷いので別のを使ったほうがいい
0864nobodyさん
2009/02/06(金) 19:13:45ID:???strictすると駄目なので、ログから取得
Unquoted string "bosyu" may clash with future reserved word at 〜.cgi line 681
Name "main::e" used only once: possible typo at 〜.cgi line 538
Name "main::msg" used only once: possible typo at 〜.cgi line 210
Name "main::s" used only once: possible typo at 〜.cgi line 538
Name "main::c" used only once: possible typo at 〜.cgi line 538
Name "main::isdst" used only once: possible typo at 〜.cgi line 145
Name "main::yday" used only once: possible typo at 〜.cgi line 145
Name "main::sec" used only once: possible typo at 〜.cgi line 145
Use of "do" to call subroutines is deprecated at ./jcode.pl line 328
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"com"} in substitution (s///) at 〜.cgi line 231
Use of uninitialized value $FORM{"com"} in substitution (s///) at 〜.cgi line 231
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 191
Argument "bosyu" isn't numeric in numeric eq (==) at 〜.cgi line 681
0865853
2009/02/06(金) 19:19:01ID:???私自身で追加した行は酷いと言われても仕方が無いと思っていましたが、
スクリプト自体が酷い となるとびっくりです。
ただ、今の私にピッタリのPerlスクリプトなので、どうしてもこれを使いたいのですが・・・
今まで色々と検索かけてみたり、ソースを変更してみたりしたのですが、
やはり私一人の力ではどうしようもできません・・・
もしよろしければ皆さんの「ここをこうすればいい」などの意見を参考にしたいです。
厚かましい願いではありますが、どうかご教示して頂けませんか?;
0866nobodyさん
2009/02/06(金) 20:12:20ID:LbIRe9/Sどこのサーバで動作させるつもりかもわからないけどCGI.pmが入ってること期待して。
use CGI;
my $q = new CGI;
my $is_visible = $q->param('bosyu');
if ($is_visible) {
登録フォーム表示コード
}
で、いけるんじゃね?
0867nobodyさん
2009/02/06(金) 20:37:48ID:???ありがとうございます。
CGI.pmは先ほど試したのですが、使うとCGI自体の動作がおかしくなってしまうので
使えませんでした。
サーバーはWinXPのApache2で、Perl5を使用しています。
0870nobodyさん
2009/02/06(金) 21:08:43ID:LbIRe9/SCGI.pmでおかしくなるとは考えにくいけど。
use CGI は2行目あたりにきちんとかいてる?
0871nobodyさん
2009/02/06(金) 21:18:08ID:???はい、
use CGI; を2行目に挿入した時点では正常に動作していますが、
3行目以降で
my $q = new CGI;
my $is_visible = $q->param('bosyu');
を挿入しますと、サブルーチンで作った画面へアクセスすることが出来なくなってしまいます。
>>856のスクリプトですと、管理画面等に入ることが出来なくなります。
その際、エラー文を吐き出すことは無く、画面が変わらずトップページのまま といった感じです。
0872nobodyさん
2009/02/06(金) 21:37:53ID:LbIRe9/Sそれなら
&decodeの下にその2行をいれてみて。
それでだめなら、decodeファンクションをかきかえないといけないかな。
0874nobodyさん
2009/02/07(土) 01:10:56ID:???親が使える関数は全て子供も使えるのでは?
0875nobodyさん
2009/02/07(土) 01:24:33ID:???既存の配布スクリプトをちょっくら改造しようと思ったのですが、
フォームの内容が空の時のみ処理をするといった部分
if( hogehoge eq "" ) {
#処理
}
これに加えてフォームの内容が特定の内容の場合も処理をするべく
if( hogehoge eq "" || hogehoge eq = "関東") {
#処理
}
このようにやったのですがフォームの内容が関東でも処理してくれません。
日本語がまずいのでしょうか?
どうか解決策をご教授くださいませ。
0877nobodyさん
2009/02/07(土) 01:31:18ID:???だとしたら、hogehogeの内容をprintしてみては?
0878nobodyさん
2009/02/07(土) 01:37:04ID:???0879nobodyさん
2009/02/07(土) 02:13:03ID:Bz2XlMXfをインストールして、Cからコンバートできるらしいとの情報をみつけたので
hoge.cをつくろうと、
C:\Perl\binへhoge.plをおき
プロンプトで
C:\Perl\bin>perl -MO=C hoge.pl > hoge.c
を実行したところ
Can't locate B/C.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at (
eval 1) line 18.
BEGIN failed--compilation aborted at (eval 1) line 18.
BEGIN failed--compilation aborted.
とでるのですが、どうやってやればよいのか非常に困っています。
どなたか何卒よろしくおねがいいいたします。
0880875
2009/02/07(土) 03:07:36ID:???自己解決しようとバグフィックスして、
結果文字コードが不全だったようで
変数の文字コードを変換したら無事に動きました。
お騒がせすみませんでした。
0881nobodyさん
2009/02/07(土) 04:10:24ID:???B/C.pmは5.10から標準で無くなった。
B/C.pmを入れるか、5.8系にするかしろ。
…でも正直それだけの価値は無いよ。
コンバートが上手く行くのは、すげえ初歩のスクリプトのみ。
0883nobodyさん
2009/02/07(土) 06:59:37ID:???>>873
Perlのオプション知らないの??>>852の書いてあるのはバラしたら
-w
-T
-c
各々のオプションを一々チェックするのは時間のムダ
上のオプションを繋げて書くと
-wTc(順番は書く人によって変わる、例えば-cwTや-Tcwなんかでもおk)
必要なオプションをつけてテストするのは当然の事だが
-Tオプション知らなかったり、オプションを繋げて書くのを知らなかったり(オプションだと気付いてない?)
少しは勉強してからPerlやれよ
0885nobodyさん
2009/02/07(土) 08:07:35ID:???0889nobodyさん
2009/02/07(土) 09:23:04ID:???0891nobodyさん
2009/02/07(土) 14:01:02ID:???45 -> 45
130 -> 2:10
3601 -> 1:00:01
どうしたらいいでしょうか?
DateTime->new(second => 4032)とかしたらyearとかも入れろって怒られました。
0892nobodyさん
2009/02/07(土) 14:10:32ID:???0893nobodyさん
2009/02/07(土) 15:08:36ID:???#!/usr/bin/perl -w
use Scalar::Util qw(looks_like_number);
use strict;
sub sec2hhmmss {
my $sec = int(looks_like_number($_[0]) ? $_[0] : 0);
my $min = int($sec / 60); $sec %= 60;
my $hour = int($min / 60); $min %= 60;
my $time = join ':', map sprintf('%02d', $_), $hour, $min, $sec;
$time =~ s/^[0:]+//;
$time || 0;
}
print map sec2hhmmss($_) . "\n", (
45, 130, 3601, 86420, 'seconds', undef,
);
__END__
0894nobodyさん
2009/02/07(土) 16:20:40ID:dq0WM+XPhoge.cをつくろうとC:\Perl\binへhoge.plをおき プロンプトで
C:\Perl\bin>perl -MO=C hoge.pl > hoge.c を実行したところ
Starting compile
Walking tree
Prescan
Tie::StdHash has method TIEHASH: saving package
Tie::Hash has method new: saving package
Tie::ExtraHash has method TIEHASH: saving package
Regexp has method DESTROY: saving package
Errno has method TIEHASH: saving package
Exporter saved (it is in Errno's @ISA)
Net::Ping has method new: saving package
Net::Telnet has method new: saving package
IO::Socket::INET saved (it is in Net::Telnet's @ISA) IO::Socket saved (it is in IO::Socket::INET's @ISA) IO::Handle saved (it is in IO::Socket's @ISA)
POSIX::SigAction has method new: saving package POSIX::Termios has method new: saving package POSIX::SigSet has method new: saving package POSIX::SigRt has method new: saving package
Saving methods
No definition for sub Fcntl::O_LARGEFILE
No definition for sub Fcntl::O_LARGEFILE (unable to autoload) No definition for sub Fcntl::F_SETLK64
No definition for sub Fcntl::F_SETLK64 (unable to autoload) No definition for sub Fcntl::F_SETOWN
No definition for sub Fcntl::F_SETOWN (unable to autoload) No definition for sub Fcntl::O_DSYNC No definition for sub Fcntl::O_DSYNC (unable to autoload)
Can't locate object method "IVX" via package "B::NV" at C:/Perl/lib/B/C.pm line
650.
CHECK failed--call queue aborted.
となり0行のCファイルができました。 どこに問題があるのでしょうか?何卒よろしくお願いします。
0895nobodyさん
2009/02/07(土) 16:26:29ID:???0896nobodyさん
2009/02/07(土) 18:52:05ID:???俺は「あたしんち」で初めて知ったから
バカチンって聞くと「あたしんち」のお母さんが
口から火を吐いてる絵が思い浮かぶ
0897nobodyさん
2009/02/07(土) 19:28:54ID:???■ このスレッドは過去ログ倉庫に格納されています