Perlコーディング初心者質問スレ Part 40
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/01/27 18:08:42ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
05/01/27 18:09:13ID:???△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1101635909/
CGIだけど、なんか質問ある? Part 12
http://pc5.2ch.net/test/read.cgi/php/1097334246/
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc5.2ch.net/test/read.cgi/php/1105046286/
0003nobodyさん
05/01/27 18:09:57ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0004nobodyさん
05/01/27 18:10:35ID:???part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/ (前スレ)
0005nobodyさん
05/01/27 18:11:41ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/
[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0008nobodyさん
05/01/28 04:42:22ID:???それを受け取って表示したいのですが・・・。
sub test {
my ( $ref ) = @_;
$ref->[1]->{'a'} = "A1";
$ref->[1]->{'b'} = "B1";
$ref->[2]->{'a'} = "A2";
$ref->[2]->{'b'} = "B2";
}
↑こんなサブルーチンを作って
my ( @data, %tmp1, $tmp2 )
test( \@test );
foreach $tmp1 ( @data ) {
foreach $tmp2 ( keys %tmp1 ) {
print qq($tmp2=$tmp1{$tmp2},);
}
print qq(|,);
}
↑こういう呼び出しを書いたのですが
a=A1,b=B1,|a=A2,b=B2,|
という結果を期待したのですがなにも表示されませんでした。
これを期待どうりにするには、何処をどうすれば良いのでしょうか?
00098
05/01/28 04:44:17ID:???正 test( \@data );
…です。
00108
05/01/28 04:53:41ID:???foreach $tmp2 ( keys %$tmp1 ) {
print qq($tmp2=$tmp1->{$tmp2},);
}
これで解決しました。
…ところで、サブルーチンの中の
$ref->[1]->{'a'} = "A1"; 等は
$ref->[1]{'a'} = "A1"; でも同じ結果なのですが
どうしてなのでしょうか?
0012nobodyさん
05/01/28 15:00:30ID:???0013nobodyさん
05/01/28 16:48:58ID:???%hash = (
"a-1" => "今日はお日柄もよく・・・",
"a-2" => "今日はみなさんに大切なお話があります・・・"
);
というスクリプトを書いています。
これをメインで
open FH,"test.txt";
eval FH;
close FH;
print %hash;
としてみたのですが、何も表示されません。
test.txtを1行にして、
eval <FH>;
とすればできるんですが、1行にすると見づらくなってしまいます。
何か方法はありますか?
0014nobodyさん
05/01/28 17:25:08ID:???doとかrequireを調べてみるといいかも。
でもそれよりファイルフォーマットを決めて
%hashにその値を読み込むルーチンにした方が
幸せになれると思う。
0017nobodyさん
05/01/28 19:54:19ID:???if (open FH,"test.txt") {
local $/;
eval <FH>;
close FH;
}
print %hash;
特殊変数 $/ について調べてみ
0018nobodyさん
05/01/28 20:56:02ID:BqQoLRNT0020nobodyさん
05/01/28 22:33:47ID:???・カンマ演算子はリストを作る。
・リストをスカラーコンテキストで評価すると最後の要素が返る。
・式の中に別の式を埋め込みたかった。
これで察してください。
002113
05/01/29 13:14:26ID:???一杯ありがとうございます!
とりあえず応急で
eval join '',<FH>;
で済ませてしまいましたが、やはり色々なやり方があるのですね。
>>14さんがいうようにperl構文をそのまま入れるならtextファイルにする意味も
微妙なところなんですが、実は結構値が長文だったりするのです;
目的は素人でもテキスト自体を追加・修正できるようするためです。
外部ファイルにして一定のわかりやすいフォーマットにするというのが前提だったのですが、
csvもどきだと長文がはいると行・列が把握しづらくなってしまいます。
できれば本当は"a-1"の中にハッシュリファレンスを入れて10項目くらいの
プロパティ的なものをもたせたいんですが、複雑化すればするほど
csvって視認性が悪くなるんですよね。
掲示板などのdatファイルってどうやってるんでしょうか?
視認性がよく、プログラムでの処理もしやすいものがいいんですが・・・
場合によってはPerl以外のプログラム言語でも使用するのでやはり現状の
Perlの構文そのまんまっていうのはいまいちですよね。
みなさんが掲示板など作るときに作るdatのフォーマットなどを参考に聞かせていただけると
助かります。
0022nobodyさん
05/01/29 13:59:05ID:???これで$1の中にマッチした文字列が入りますが、
$1って1回中身を参照したら削除されてしまうのですか?
($a) = $1 =~ /\d/;
($b) = $1 =~ /[a-zA-Z]/;
試しにこういうことをしたら後からやるほうには何も代入されないんです。
windows版activePerl5.6.1での話です。
もしも$1の中身を何度も参照したければ一旦他の変数に入れる以外に策はありませんか?
0023nobodyさん
05/01/29 14:36:54ID:fOhenI6O中身を参照したら消えるのではなくて次のパターンマッチ成功
またはブロックの終わりまで有効なのだが、どちらにせよそれを
越えて値が必要なら変数なりなんなりにしまっておくしかないね。
0024nobodyさん
05/01/29 16:22:50ID:???レスありがとうございます
0025nobodyさん
05/01/29 18:02:14ID:4Kvcglslfor(1..100)
って書けるけどデクリメントする時はどう書くんだろう?
for(100..1)
は無理だよね。
0026nobodyさん
05/01/29 18:06:59ID:???http://perldoc.com/perl5.8.4/pod/func/reverse.html
for (reverse 1..100) { ... }
0027nobodyさん
05/01/29 18:24:05ID:???0028nobodyさん
05/01/29 19:32:37ID:???http://perldoc.com/perl5.8.4/pod/func/sleep.html
http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_sleep.asp
0029nobodyさん
05/01/29 20:47:53ID:YcAE5qw3$flag = 1;
}
どうしてもこれが上手く行きません。
なぜなのでしょうか?
ご教授お願い親します。
0030nobodyさん
05/01/29 20:54:06ID:YcAE5qw3追加。
$_に入るのは
DoCoMo/2.0 F900i(c100;TB;W22H12)
です。
0032nobodyさん
05/01/29 21:19:51ID:fOhenI6Oカッコやピリオドは正規表現のメタキャラクタなので
そのまま埋め込むと別の意味になってしまう。
if($ENV{'HTTP_USER_AGENT'} =~ /\Q$_\E/){
$flag = 1;
}
とかすればいいだろう。
0033nobodyさん
05/01/29 21:20:55ID:???$ENV{'HTTP_USER_AGENT'} と $_ をプリントして同じものか見れば?
単に$_ にセットされていないって話じゃないだろうな。
0034nobodyさん
05/01/29 21:34:08ID:YcAE5qw3だけでは上手く行かず
my(@data) = ("$tmpDefine[0]","$tmpDefine[1]");
と配列に入れるさいに""をつけて解決しました。
ありがとうございました。
0035nobodyさん
05/01/29 21:43:44ID:fOhenI6O後半はundefが空文字列に変換されるあたりの関係かねぇ。
0036nobodyさん
05/01/29 23:31:30ID:k1P2HVvm携帯で見れるようにしたいのですが文字化けしてしまいます。
jcode.plはあるのですがどう使っていいのかわかりません。
perlコーディングというかプログラム自体初めてです。
文字コードのことがよくわかりません。
わかりやすいサイトなどありましたら教えてくださ
どれではおながします
0037nobodyさん
05/01/30 00:35:14ID:???そしてスクリプト内で
use encoding 'Shift_JIS';
と宣言しろ。
0038nobodyさん
05/01/30 01:34:47ID:7qmv52uq最後の2行、グダグダやね。
0040nobodyさん
05/01/30 13:02:28ID:0daQX9sHnkfでShift-JISに変換してしまっては?
test.cgiをまた編集したくなったらnkfでEUCに。
ちょっと面倒だけど。
0041nobodyさん
05/01/30 13:39:39ID:???--------------------------------------------------
#@ip_listは下記のようなリストです。
@ip_list = ('333.139.141.','333.20.117.','333.255.29.');#という感じ
$addr = $ENV{'REMOTE_ADDR'};
foreach (@ip_list){
if ($addr =~ /^$_/){
$flag = 1;
last;
}
}
--------------------------------------------------
これで一応うまくいっていたので、これまで何も考えて無かったのですが、
これは「.」が正規表現のメタ文字で「任意の1文字」なためにたまたまうまくいってただけで、
if ($addr =~ /^$_/)
は
if ($addr =~ /^\Q$_\E/)
とした方がいいのでしょうか?
0045nobodyさん
05/01/30 15:21:23ID:nMKi12Lvパターンの「.」の部分が数字にマッチするよう
だとたいていはアドレスの中の「.」がパターン
の中の数字の位置に来るような気がするので
かなり必然に近い偶然とはいえるな。
しかしだから大丈夫だということを証明しようと
がんばるよりは素直にエスケープしとけ。
0046nobodyさん
05/01/30 15:22:07ID:???これでもOK。
@ip_list = map{ quotemeta } ('333.139.141.','333.20.117.','333.255.29.');
004741
05/01/30 17:48:45ID:???考えてみたら、
if ($addr =~ /^333\.139\.141\./)
ひとつだけの場合だったらこうやってエスケープして書いているのに、
リストの要素ひとつひとつとの比較の場合はエスケープしてないっておかしいですよね。
ちゃんとエスケープ処理をするよう気をつけたいと思います。
>46さん
map関数調べてみました。
こういう便利な関数もあるんですね。たいへん勉強になりました。
0048nobodyさん
05/01/30 18:36:05ID:60wlVefX|ddddddd|momddomo|aaaaaaaaaa|
|wwwwwww|fddddddd|ssssssssss|
|eeeeeee|pppppppp|rrrrrrrrrr|
'|'を区切りとしてテーブルタグに変換させる正規表現
を作れる人いませんか?
どうか宜しくお願い射ます
0049nobodyさん
05/01/30 18:59:58ID:???何を「どのように」変換したいのかをはっきりさせてから↓で聞いてください。
正規表現道場@2ch Part4
http://pc5.2ch.net/test/read.cgi/php/1105930285/
0050未承諾広告※ ◆TWARamEjuA
05/01/30 19:09:18ID:???0051nobodyさん
05/01/30 19:10:45ID:???0052未承諾広告※ ◆TWARamEjuA
05/01/30 22:08:02ID:???でも、一致しないときは全部サーチしなきゃだから、やっぱりハシュに入れちゃった方が効率よさそうですね。
0053nobodyさん
05/01/31 17:52:56ID:sSr/NKoB知りたいのですが、どう書けばよいのでしょう?
system で、ls -l した結果を切り貼りすれば、とりあえずできそうなのですが、
もう少し何か方法がありそうな気がしまして。
0054nobodyさん
05/01/31 18:04:55ID:???マジかよ!?
何でそんなセキュリティホール量産体制を作っちゃうのよ?
ユーザが送ってきた文字列を正規表現に使う前にサニタイジングしないと
いけないなんて面倒じゃないか?
っていうか何のメリットがあってそんな仕様なんだ?
0055nobodyさん
05/01/31 18:10:49ID:???0057nobodyさん
05/01/31 20:39:27ID:8ZuDaXBy「/ほげほげ」という文字を消したいんですよ。
$line =~ s|/ほげほげ||g;
↑で消えないんですが、どうしてって気持ちです。
「ほげほげ」だけなら↓で消えるのですが。「/」←コイツ(全角)が消えないのです。
$line =~ s|ほげほげ||g;
どうしてご存じかいませんか?
0058nobodyさん
05/01/31 20:40:18ID:8ZuDaXBy0059nobodyさん
05/01/31 20:44:59ID:???か?
0060nobodyさん
05/01/31 20:46:01ID:???こうだったか…orz
0061nobodyさん
05/01/31 20:56:16ID:???別の話になるが、マッチするしないは見た通りと一致しないこともある。
暇があったらこういうのも読んでおくといい。
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0062nobodyさん
05/01/31 20:58:15ID:???ありがとう・・・・・
(>_<)
今日一日はずっとこれ考えてました。
早くココで聞けばよかった…
0063nobodyさん
05/01/31 21:02:00ID:8ZuDaXBy今まで、全角はずっと文字あつかいでした。
0064nobodyさん
05/01/31 21:23:56ID:???>っていうか何のメリットがあってそんな仕様なんだ?
多分、\Q と \E をタイプする程度のことに文句を言うユーザを
排除しようとしたんじゃないかな。
0065nobodyさん
05/01/31 21:52:09ID:ZqzhsiuTSJISで書いただけじゃねーの?
「/」は815eだから正規表現のメタ
文字の「^」を含むので。
use encodengする場合除いてSJISで
スクリプト書くとはまるからやめた
方がいいと思う。
0066nobodyさん
05/02/01 01:04:11ID:???プログラムの冒頭に書いてあるこれはどういう意味でしょうか。
■ このスレッドは過去ログ倉庫に格納されています