Perl コーディング初心者質問コーナー Part33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/03/01 02:46ID:1GeWO7LH【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0197nobodyさん
04/03/07 02:15ID:???#!/usr/local/bin/perl
use strict;
(my $now_dir = $ENV{'SCRIPT_FILENAME'}) =~ s|/[^/]+$||;
(my $base_dir = $now_dir) =~ s|[^/]+$||;
print "Content-Type: text/plain\n\n";
$ENV{'QUERY_STRING'} =~ /^(\w+)/;
length $1 or error('No assigned new dir name.');
my $new_dir = $base_dir . $1;
-e $new_dir and error("$new_dir already exists.");
chdir $base_dir or error($!);
rename $now_dir => $new_dir or error($!);
chdir $new_dir or error($!);
print 'ok.';
sub error {
print "Not changed: @_";
exit;
}
>>195
http://perldoc.com/perl5.8.0/lib/strict.html
0198nobodyさん
04/03/07 02:36ID:???どうも素早い返信ありがとうございます〜
さっそく試してみたいと思います
それにしてもchdir使えばいけるとは・・・思いもつきませんでした
危うくcpでフォルダ全コピーして削除する方法をするとこだったし
0199nobodyさん
04/03/07 05:46ID:???例えば、JcodeのOOは
Jcode->new(\$str)->utf8;
の様にすれば良く、これは
$char = 'utf8';
Jcode->new(\$str)->$char;
でも良いようなのですが、
%char(UTF-8 => 'utf8');
Jcode->new(\$str)->$char{'UTF-8'};
のようにハッシュを使うと構文エラーと言われます。
ハッシュを使うにはどうすれば良いのでしょうか。
0200nobodyさん
04/03/07 10:57ID:???実行時チェックはシンボリックリファレンス(${'var_name'}のようなやつ)の禁止だけなので、
厳密にいうとデバッグがすんだらuse strict 'refs'のみにしてもかまわない。
が、本当に些細な負荷でしかない(しかも、コンパイル時チェックなので実行速度には影響しない)ので
敢えてそこまでする意味はない。っつか、黙ってuse strictしとけ。
>>199
$enc = $char{'UTF-8'};
Jcode->new(\$str)->$enc;
または
Jcode->new(\$str)->${ \$char{'UTF-8'} };
しかし意味も無くメソッドを変数にするのはお勧めできない。読み難い。
Jcode::convert(\$str, $char{'UTF-8'})とするのが普通だと思うぞ。
0202nobodyさん
04/03/07 11:50ID:???HTMLで出力している意味をわざわざ遠回りしてまで殺して何の意味が?
0203182
04/03/07 13:04ID:???リアルタイムに更新されない。と考えるとデメリットだけど、
リアルタイムに更新されなくて済む。と考えるとメリットになる。
メリットとして生かせるつくりにすることが重要。
0204nobodyさん
04/03/07 15:18ID:hh7UC8WbWin2000にActive Perl ver 5.8.3を入れています。
flockの使用可否について調べているのですが、
$file = "data.dat";
open(OUT,"<$file");
eval { flock (OUT,2); };
if ($@) { warn "flock NG"; } else { print "flock OK."; }
こう書いてコマンドラインで実行すると、必ずOKと出力されます。
これってevalの使い方あってますか?
また、Winってflock効くのでしょうか?
0205nobodyさん
04/03/07 15:43ID:???>200
そうだったのですか。
Jcodeのマニュアルに Jcode->new(\$str)->euc; のやり方のほうが良い、
みたいな事を書いてあったので変更しようとしていたのです。
0206こば
04/03/07 16:33ID:E9jZV2PD以下の二つの違いを教えて頂けないでしょうか?
print "<FONT size=\"5\">\n"; #ダブルクオート入り
print "<FONT size=5>\n"; #ダブルクオートなし
0207nobodyさん
04/03/07 16:36ID:???HTMLの事をなぜここで聞く?
0208nobodyさん
04/03/07 16:37ID:???極めてスレ違いでござる。
0209nobodyさん
04/03/07 16:39ID:???0210こば
04/03/07 16:49ID:E9jZV2PD0213nobodyさん
04/03/07 19:18ID:???どうしてもサーバエラーになってしまいます(デバッガで見ると
「Too late for "-T" option at copy.cgi line 1.」と出ます)。
#!/usr/bin/perl -T
$a_dir = '../a/data';
$b_dir = '../b';
system("cp -r $a_dir $b_dir");
内容としては、あるディレクトリを丸ごとほかのディレクトリに
バックアップするような ものなのですが、
taintモードで動かすこと自体が不可能なのでしょうか?
もしくはどうすればtaintモードで動くでしょうか?
0214nobodyさん
04/03/07 20:04ID:hh7UC8Wb鯖として運営してるマシンで、いまどきflockを効かせないようにしてる鯖ってあるんか。
0216nobodyさん
04/03/07 21:48ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
0217194
04/03/07 22:03ID:???いろいろ変数かえたりしたんだが全くダメだ
UNIX系のサーバーで試しにやったら動いたんだけど
Windowsで動かしたいんだけどなぁ
やっぱフォルダ全コピーしかないのか_| ̄|○
0219nobodyさん
04/03/07 23:25ID:???こうしたとかも書かずにただダメなのかとだけ言ってる連中って、
何の意味があって書き込んでるんだ?
同情して欲しいのか?
0220nobodyさん
04/03/07 23:41ID:???それがわかれば他の解決法もあるかもしれないのに。
0221nobodyさん
04/03/08 02:04ID:???($id,$name,$value,$other) = split(/\,/,$line);
if($name =~ /$search/ or $value =~ /$search/) {
という具合に、「名前」か「本文」に、「検索用の単語」が含まれていれば、という仕組みを作ってみたんですが、
検索用単語がエスケープする必要のある文字(表示とか)だと、エスケープしないと検索結果に出ません(表\示で検索しなければならない)。
どうしたらいいんでしょうか? そもそも間違ってますか?
0222nobodyさん
04/03/08 02:12ID:???0223221
04/03/08 02:16ID:???$nameや$valueの中身が「表\示」になっている、というわけではない、ということですかね。
0224nobodyさん
04/03/08 02:31ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0226225
04/03/08 03:48ID:???0227221
04/03/08 06:25ID:???有難う御座います。
$name =~ s/\\//g;
$value =~ s/\\//g;
とやって、該当部分の\を無くす、でマッチさせるやりかたで出来ました。
ただ、そうすると、
$name =~ s/$search/<em>$search<\/em>/g;
$value =~ s/$search/<em>$search<\/em>/g;
で強調してる部分が適応されません。
$valueの中の$search(表示)に該当する部分、ってのは実質(表\示)なわけですからマッチされない、ってわけですよね。
また詰まりましたです。
0228221
04/03/08 06:37ID:???$value =~ s/$search/<em>$search<\/em>/g;
の直前にも、
$name =~ s/\\//g;
$value =~ s/\\//g;
入れたら解決しました。
ただ、本文の\が全部消えてしまいますけどいいんですかね。
0229221
04/03/08 08:17ID:???$name(\を抜いたもの)と$search(\がないもの)がマッチするか確認する、ってするよりも、
$searchがエスケープシーケンス込み、になるようにした方が、em要素も適応できてよさげな気がするんですが、
$searchにどういう処理を加えたら「表\示」のような中身になるんでしょうか?
0230nobodyさん
04/03/08 08:20ID:???0234nobodyさん
04/03/08 10:50ID:???0235221
04/03/08 11:09ID:???0236nobodyさん
04/03/08 11:24ID:???0238nobodyさん
04/03/08 23:19ID:???# ランダムで数字を表示
$n = int(rand 43) + 1;
# CGIヘッダの出力
print "Content-type: text/html\n\n";
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>ランダム数字</title></head>\n";
print "<body>\n";
print "<p>今回の数字-----------★<big>$n</big>★</p>\n";
print "</body></html>";
というプログラムを作りましたが、この「今回の数字」という部分の
文字の色を変えるにはどのように修正したらよいでしょうか?
0240nobodyさん
04/03/08 23:34ID:???(・∀・)カエレ!!
0241nobodyさん
04/03/09 03:37ID:???use CGI;
$n = int(rand 43) + 1;
print "Content-type: text/html\n\n";
$obj = new CGI;
print $obj->p($obj->font({color=>'red'},'今回の数字').'-----------★'.$obj->big($n).'★')."\n";
0242nobodyさん
04/03/09 03:39ID:???と言うのなら答えてもいいが…
0243238
04/03/09 09:30ID:???それなのに丁寧な回答ありがとうございます。
昨夜、ヒアドキュメントを使う事で簡単に解決出来ました。
タグはXHTMLしかやってなかったので、それが原因のようでした。
241さんのプログラムは今日家に帰ったら試してみます。
もしよければ242さん教えて頂けませんか?
それと今やろうとしている事で質問させて下さい。
$x = int(rand 5) ;
@abc = ( A , B , C , D , E ) ;
@key_a = ('Apple','Age','And','Angry') ;
@key_b = (頭文字Bの単語 );
@key_c = (頭文字Cの単語 );
@abcの中からランダムに選んだアルファベットに対応した
@key_?の中からまたランダムに選び出すという
プログラムを作りたいのですが、これにはどうしたらよいでしょうか?
0245nobodyさん
04/03/09 10:14ID:???モマエは質問の前にもうちょっとドキュメント読んだ方がいい
新しい事やる度に質問する事になる
あーやべ俺ちょうしんせつ涙が出てくるワ
0246nobodyさん
04/03/09 10:28ID:???0247nobodyさん
04/03/09 11:46ID:???ハードリファレンスよりもシンボリックリファレンスの方が
直感的にわかりやすいらしい。
>>243
真面目に答えると、二次元配列などを使うのが普通の発想だと思う。
%abc = (A=>['Apple','Age','And','Angry'],B=>[頭文字Bの単語],C=>[頭文字Cの単語]);
とかそんな感じ。これだと例えば $abc{A}->[2] が 'AND' になる。
ラクダ本だと「リファレンスとネストされたデータ構造」の章あたりを読むとよい。
0248nobodyさん
04/03/09 11:47ID:???%abc;
for ($ii=0; $ii<@abc; $ii++){
$abc{"$abc[$ii]"}{'key_a'} = $key_a["$ii"];
$abc{"$abc[$ii]"}{'key_b'} = $key_b["$ii"];
$abc{"$abc[$ii]"}{'key_c'} = $key_c["$ii"];
}
print $abc{'A'}{key_a}; #=> Apple
hash勉強せい
0251nobodyさん
04/03/09 14:49ID:???ShiftJISに含まれていない文字(半角カナなど)だけを実態参照に変換したいのですが,
どうしたらいいのでしょうか。
0252nobodyさん
04/03/09 14:59ID:???validatorには注意されるけど「HTML的」にはstrict(validではなく)。
詳しい事は製作板で識者にでも教えて貰って下せえ。
0253nobodyさん
04/03/09 15:00ID:???0255nobodyさん
04/03/09 16:42ID:???0001.html.gz って名前のファイルを
gzsend.cgi?0001
みたいに呼び出してますが画面真っ白で何も表示されません。
鯖はxreaです。
HTTPD + ActivePerl な環境のローカルだとうまくいくのですが…
ソースはこんな感じです。
print <<HERE;
Content-type: text/html; charset=Shift_JIS
Content-Encoding: gzip
Content-Language: ja
Pragma: no-cache
Cache-Control: no-cache
HERE
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$key = $ENV{'QUERY_STRING'};
}
open(ALL,"$key.html.gz");
binmode(ALL);
binmode(STDOUT);
print <ALL>;
close(ALL);
exit;
これで <a href="gzsend.cgi?0001">表示</a> <a href="0001.html.gz">Download</a>
みたいな使い方したいのですが…いったい何が悪いのやらさっぱりです。
0257>>251 1/2
04/03/09 17:01ID:???use Jcode; もしくは require 'jcode.pl';
$_ = "アイウエオ";
Jcode::convert(\$_, "euc"); もしくは &jcode'convert(\$_, "euc");
s/。/?/g;
中略(ちなみに61行分)
s/゚/?/g;
Jcode::convert(\$_, "sjis"); もしくは &jcode'convert(\$_, "sjis");
あとは以下を参照して。
HTML4 で使える文字実体参照 http://www.ne.jp/asahi/minazuki/bakera/html/reference/charref
あとEUCで書く事
SJISでかくなら s/ア/?/g; → s/竺/?/g みたいにわざと文字化けさせた状態にする事
0258255
04/03/09 17:07ID:???使えます。
普通にgzip圧縮転送は
ヘッダーに Content-Encoding: gzip と
if (-d "\\") { open(STDOUT,"| gzip.exe -1 -c"); } #ローカルテスト用
else { open(STDOUT,"| /bin/gzip/ -1 -c"); }
こんなんでうまく動きます。
gzipで圧縮済みのファイルをcgiから送るのがうまくいかなくて悩んでるんですけど。
0261nobodyさん
04/03/09 18:31ID:???あぁ そういうことか
ごめん勘違いしてた
単なるgzファイルをCGIから吐かせたいのね
それって根本的にContent-type: text/htmlじゃなくないか?
0262255
04/03/09 19:20ID:???自動広告挿入無効の"x"ディレクトリに設置してみたところ動作しました。
普通に鯖側で圧縮して送る時は"x"ディレクトリじゃなくても動作するのに…
まぁ、そういう思いこみもあって盲点でした。
助かりました。ありがとうございます。
しかし今度は gzsend.cgi? の?以降になんか変なの書いたり何も書かなかった時に
何も指定されてません とか そんなファイルありません ってHTML吐くようにしてたのに
それが表示されなくなりました。
"x"ディレクトリに変える前はうまくいっていたのに…
エラー画面でなくてもさほど困らないしとりあえずこのまま使います。
>>261
Content-type: text/html; charset=Shift_JIS
Content-Encoding: gzip
なヘッダー書いてから.gzなファイル送ってやるとgzip圧縮転送と等価にブラウザにはHTMLで表示され
なおかつ圧縮済みだから鯖に負荷掛からない。
さらに以下みたいにして
<a href="gzsend.cgi?0001">表示</a> <a href="0001.html.gz">Download</a>
一つのファイルで表示用とダウソ用を兼ねる→(゚д゚)ウマー を狙ったんですよ。
0263へたれ
04/03/09 21:51ID:vgAvuUAX掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0264nobodyさん
04/03/09 21:52ID:vgAvuUAX掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0265nobodyさん
04/03/09 21:55ID:vgAvuUAX掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGIを呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
0266へたれ
04/03/09 21:57ID:vgAvuUAX表示されなくて何回も…やっぱりヘタレです
0267nobodyさん
04/03/09 22:07ID:???0268nobodyさん
04/03/09 22:21ID:???あるフォルダに、.htaccessと.htpasswdによるアクセス制限を
掛けています。アクセスすると、認証ダイアログが立ち上がることになるのですが・・・。
これを、フォームか何かで入力して、cgiで受け取って処理して認証画面が
出ないようにすることは可能なんでしょうか?
ご存知の方おられましたら、よろしくお願いします。
0269nobodyさん
04/03/09 22:47ID:4E/0UBZO<a href="test.html#hoge">
と同様の処理を行うには
どうしたらよいでしょうか?
--a.html--
<frame src="test.cgi" >
--end--
--test.cgi--
my ($html) = << "__END_HTML__";
<html>
<head>
</head>
<body>
<a name=hoge id=hoge>ほげ</a>
<body>
</html>
__END_HTML__
if (open(HTML, "test.html")) {
print $html
}
--end--
教えて下さい。
0270nobodyさん
04/03/09 23:05ID:???例えば同じディレクトリに hetare.cgi があったとして、
$a = `hetare.cgi`;
と書けば、一応 hetare.cgi を実行できんこともない。
いろいろ細かい制約もあるので、常に期待した通りに動くとは限らんが。
>>268
必ずしも質問の意図を正しく捉えていないかもしれないが、
「.htaccess で制限かけたディレクトリがあって、普段だとBASIC認証しないとアクセス不可だが、
あるフォームからCGIにID/パスワードを送ると、BASIC認証に成功した状態になって、
例のダイアログを経なくてもそのディレクトリ内のファイルにアクセスできるようになる」
ということをしたいのだったら、不可能だろう。
付け加えると、この質問は「WebProg 初心者の質問」スレの方がふさわしかった。Perl と関係ないから。
>>269
なにをしたいかよくわからないが、少なくともこのスレの範疇では無さそうだな。
なにをしたいかよくわからないので、どのスレに誘導していいかもわからん。すまん。
0271nobodyさん
04/03/09 23:27ID:???http://id:password@servername/
0272268
04/03/09 23:34ID:???ありがとうございます。やはり不可能ですよね・・。
>>271
先日までは、それでOKだったんですが、IEの2/2のパッチを当てると
URLを使った、BASIC認証が不可能になってしまったので・・・。
0273nobodyさん
04/03/09 23:57ID:???今、アクセスカウンターを作っています。
カウント数のみ表示されるのはうまくいったのですが、
「sprintf」を使って数字の前に0を付けて桁数を揃えようと
修正したものが何度やってもうまくいきません。
for ($i=0; length($count)>$i; $i++){
$number=substr($count, $i, 1) ;
$dinumber=sprintf("%06d",$number) ;
print "<IMG SRC=$gifdir/$dinumber.gif $size ALT=$dinumber>" ;
}
これだと画像が表示されない上に数字の前に0がつかない状態です。
どこが間違っているのでしょうか?
ちなみにうまく動いていたときのプログラムです。
for ($i=0; length($count)>$i; $i++){
$number=substr($count, $i, 1) ;
print "<IMG SRC=$gifdir/$number.gif $size ALT=$dinumber>" ;
}
0274nobodyさん
04/03/10 00:02ID:???まずはそこから勉強した方がいいと思うぞ。
0275nobodyさん
04/03/10 00:44ID:qF7ZudiB$|=1;
use Fcntl qw(:flock);
$outfile = "outtmp.html;
print "Content-Type: text/html\n\n";
open(OUT,"> $outfile");
flock (OUT, LOCK_EX);
print OUT "aa";
close OUT;
print "Done";
たったこれだけなのに、outtmp.html;が作成されません。
なぜなのでしょうか・・・。凡ミスだとは思うのですが、数時間考えても分からず。。。
0276nobodyさん
04/03/10 00:50ID:???0277nobodyさん
04/03/10 01:00ID:???ファイルが読み込めないのは単にファイル名が違うだけとかだったりしないか。
下(元)の奴だと0.gif〜9.gifを読み込むようになってるが
上(改造後)の奴だと000000.gif〜000009.gifを読み込むようになってるし。
0278275
04/03/10 01:17ID:qF7ZudiBあれ・・・おはずかしい。ありがとうございます。
しかし、これでも500エラーにはならないんだ。。。
0279nobodyさん
04/03/10 04:10ID:???まずコマンドからコンパイルエラーメッセージと変な記述の警告をあてにしようよ。
0280nobodyさん
04/03/10 04:45ID:???エラーログ見るとかCGI::Carp使うとか、とにかくPerl自体のエラーを見られる環境を
作ってからいじるべし。できれば use strict; と -w オプションも使うのが望ましい。
数時間考える暇があるんならこっちに時間をかけれ。
0281nobodyさん
04/03/10 10:09ID:???length関数とsubstr関数についてはもう一度調べなおしてみました。
forの部分で$countの長さを取り出し、それを0番目から1文字分
抜き出すという事でよいですよね?ということは、この$count自体を
先に整形する必要があるのかと思い、先にsprintfで数字の前に
0をつけてからfor文で処理するようにしました。
これは今日帰ってから試してみます。
$gcount = sprintf("%06d",$count);
for ($i=0; length($gcount)>$i; $i++){
$number=substr($gcount, $i, 1) ;
print "<IMG SRC=$gifdir/$number.gif $size ALT=$number>" ;
}
0282nobodyさん
04/03/10 10:14ID:SqQ9bd0u下のプログラムは、PRINTメソッドが無いよ〜って怒られてしまいます。
mainパッケージは触らず、
PRINTやREADといったメソッドを定義せずに済む方法はありませんか?
よろしくお願いします。
#!/usr/bin/perl
package main;
open(F,">hoge.txt");
tie *F , 'tieHandle' , *F;
print F "test\n";
close F;
package tieHandle;
sub TIEHANDLE {
bless \$_[1];
}
sub CLOSE {
my $fh = shift;
*FILEHANDLE = $$fh;
print FILEHANDLE "\n","=== CLOSE method called. ===","\n";
close FILEHANDLE;
}
0283ヘタレ
04/03/10 10:50ID:huq9wT6Vありがとうございます、でも$a = `hetare.cgi`;としてどうするんでしょうか?
変数に設定したあとどんなスクリプトを書けばいいんでしょうか?
また、制限ってどんな事があるんでしょうか?
もし参考になる文献とかありましたら調べてみますんで教えていただけないでしょうか
質問ばっかりで申し訳ありません。
0284nobodyさん
04/03/10 12:13ID:???`hetare.cgi`; と書くだけで hetare.cgi が実行される。
$a = `hetare.cgi`; とすると、hetare.cgi を実行した出力結果が $a に入る。
ポイントは、' (シングルクォート) でなく ` (バッククォート) を使うところにある。
「perl バッククォート」で google 検索かけてみそ。
制限だが、今回はアクセス解析CGIだということなので、たぶん問題は無い。
しかし、環境変数やカレントディレクトリは呼び出し元プロセスのがそのまま使われるとか、
CGI引数を渡したい場合にはちょっと知恵がいるとか、
そういうことがあるので、便利だからと言ってほいほい使っていると後でハマる。
0285nobodyさん
04/03/10 12:27ID:???動かない→悩む→ココで質問な人が多いようですね。
チェックの仕方知らない人も結構いるんじゃないかな?
自分がやってるチェック法を紹介しておきます。
−−以下−−
cmd /k perl -c %1
−−以上−−
って内容のバッチファイルを作り、それのショートカットにソースファイルをドロップ。
ローカルの環境です。Perl は Active Perl です。
use strict; と -w は今のところ使ってません。
ここに、Perl Checker ってのもあります
http://www.kent-web.com/utility/index.html
open(PROC,"perl -c $file 2>&1 |");
なんて事やってるだけだけど。
0286ヘタレ
04/03/10 13:31ID:huq9wT6Vありがとうございますm(_ _)m実は簡単に出来るんですね、
print"<!--#include ....とか、変な事やってました、恥ずかしいです。
ありがとうございました。
0287nobodyさん
04/03/10 15:29ID:???$input = 10;
としまして、
@dataに1,2,3,4,5・・・と数字が入っていまして、
$inputの値がこの配列の中に入っているかどうかを調べるのはどのようにすればいいのでしょうか?
配列に対してindexは使えないですよね?
0290nobodyさん
04/03/10 15:42ID:???>何と言っても最大の誤りは、さまざまなエラーを指摘してくれる -w スイッチを
>指定し忘れるというものである。
>2番目に大きな誤りは、use strict を使うべきところで使わないというものである。
とにかく、error.log(デフォルト設定)に出されたエラーの内容を把握する事が、
バグを取り除く為に最も効率の良い手段。
もしエラーの内容がわからなければ、らくだ本の9章に載せられている解説を読めば良い。
らくだ本を持っていなければ、エラーの一部分で検索してみるとか、
或はここで聞けば誰かが教えてくれるかも知れない。
0291nobodyさん
04/03/10 15:58ID:???0292nobodyさん
04/03/10 15:58ID:???grepだと、上の例なら
配列内に1 ・・・ 100ってあって、
$inputが1だったら、凄まじい量が出てくると思われ。
0293287
04/03/10 15:59ID:???すいません、grepを今使ってみたのですが、
$input = 5;
@match = grep (/$input/,@data);
foreach (@match) {
print "$_ ";
}
@dataが1から30までなのですが、
5だけでなく、15や25も出てきてしまうようです。
この場合ですと5だけを取り出したいのです。
0294nobodyさん
04/03/10 16:20ID:???@match = grep{$input eq $_}(@data)#数値比較なら ==
0295nobodyさん
04/03/10 16:23ID:fPcyCnVNくどく言ってる香具師がいるけど、初心者は、そんな
ことより、正確なコーディングに集中すべし。
例えば、>>293のだって、いちいちそんなことしている
必要はないだろ。strict厨、my厨引っ込め!
0296nobodyさん
04/03/10 16:30ID:???(grep{$input eq $_}(@data))? print 'match': print 'unmatch';
で良い気がs
>295
煽りなのかネタなのか、単に勘違いしてるのか良く判らんが、
「正確なコーディングに集中す」るのに my や use strict はこれ以上なく有効だぞ。
そもそも、何故相手を厨と罵ってまでこれらを使いたくないかの方が意味不明(´ω`)
■ このスレッドは過去ログ倉庫に格納されています