1 :
デフォルトの名無しさん :
2008/07/09(水) 11:11:10 "The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
( WEBプログラミング板
http://pc11.2ch.net/php/ )
CGIの質問は答えが Perlと全然関係ない話に帰着する場合が
多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html ● 2008/07/09 現在の最新版(安定版): 5.10.0
● 2008/07/09 現在の開発版: ------
▼ 前スレ
Perlについての質問箱 35箱目
http://pc11.2ch.net/test/read.cgi/tech/1208674881/ リンク集は
>>2-3 Perl 日本語処理の基礎の基礎
>>4 過去スレは
>>5 あたり
2 :
デフォルトの名無しさん :2008/07/09(水) 11:12:05
3 :
デフォルトの名無しさん :2008/07/09(水) 11:13:06
4 :
デフォルトの名無しさん :2008/07/09(水) 11:13:52
# [Perl 日本語処理の基礎の基礎] # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; # 次に、あなたが実行したい処理の内容を入れて下さい。 $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 # 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、 # ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。 # ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、 # この例のようにcp932でエンコードする必要があります。
5 :
デフォルトの名無しさん :2008/07/09(水) 11:14:55
6 :
デフォルトの名無しさん :2008/07/09(水) 11:15:45
7 :
デフォルトの名無しさん :2008/07/09(水) 12:21:47
perl 死ね!
8 :
デフォルトの名無しさん :2008/07/10(木) 00:22:31
☆ チン ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< perlboob まだ~? \_/⊂ ⊂_)_ \_______ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| | .|/
頭無き心は邪なる魂なり
普通の配列に連想配列を入れるときは my %d = ( 'name'=>'ami', 'size'=>74 ); push @list, \%d; という感じで詰めていけるけど、これを取り出すとき 一旦変数に入れたいんだけどどうしたらいい? my %e = $list[0]; print $e{'size'}; とかやっても見れないみたい。 print $list[0]['size']; などで見るのはできるのに。
日本語でおk
>>11 デリファレンスを勉強する
%e = %{$list[0]};
print $e{'size'};
または
$e = $list[0];
print $$e{'size'};
my $e = $list[0]; print $e->{'size'};
>>13 えーと・・・ $e = $list[0]; の時点では 実体のコピーは発生してない
ってことでおk?
だから、リファレンスとデリファレンスの勉強してこいって。
17 :
15 :2008/07/11(金) 13:48:30
勉強した結果がこれだよ
\%d←リファレンス←実体へのアドレス←コピーじゃない
19 :
15 :2008/07/11(金) 16:29:39
すみません、分からないのでガンダムで例えてください
\%d←リガズィ←情けないモビルスーツ←νガンダムは伊達じゃない
ガンダムもどきですね、わかります
\%d←F91←口が開く←質量をもった残像だというのか?
以下のようなコードを書いて perl -n to_sjis.pl < euc-jp.txt > shiftjis.txt しても euc-jp.txt の最初の 1 行しか出力してくれませんでした 何故なんでしょうか? -- to_sjis.pl -- #!/usr/bin/perl use strict; use warnings; use Encode; use Encode::Guess; # Shift_JIS if ( ref(guess_encoding($_, qw/shiftjis/)) ) { print $_; exit; } # EUC-JP if ( ref(guess_encoding($_, qw/euc-jp/)) ) { print encode("shiftjis", decode("euc-jp", $_)); exit; } # Others die "error!"; -- to_sjis.pl --
>>23 何故も何も-nの動作詳細とprintした直後に何してるのかを100万回見直せ。
>>24 > printした直後に何してるのか
ああどうも
perl -n って全行に perl hoge.pl を適用するんじゃなく
while (<>) { ~ } の ~ に hoge.pl を埋め込むような動作なわけね
んで exit が効いちゃうわけね
26 :
23 :2008/07/12(土) 16:31:18
とりあえず EUC-JP の場合のみ Shift_JIS に変換するようにしてみた 当たり前かもしれないけど Encode::encode じゃ文字コードは変わっても改行コードは変わらんのね… -- to_sjis.pl -- #!/usr/bin/perl use strict; use warnings; use Encode; use Encode::Guess; if ( ref(guess_encoding($_, qw/euc-jp/)) ) { $_ = encode("shiftjis", decode("euc-jp", $_)); }
ActivePerlでImage::Magick使いたいんですけど助けてください。 ActivePerl5.10だとcore_rl_magick.dllがありません的なこと言われて、 ActivePerl5.8だとCan't locate Image/Magick.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib.)って出ます。 ImageMagickはImageMagick-6.4.2-1-Q16-windows-dll.exeで入れました。 ActivePerl5.8とImageMagick6.3.4-7入れてる別のパソコンでは使えてるんですが そのバージョンのImageMagickを入手できるところがない。
つ PPM
29 :
27 :2008/07/13(日) 22:26:02
>>28 PPM見ても
Apache-ImageMagick
Image-Magick-Square
Image-Magick-Thumbnail-Fixed
しかなくて、目的のとは違うと思うんですよね。
>>30 できました!!!
聞いてよかった。ありがとうございましたー
おれも感謝感謝 ImageMagickって古いversionはどこに置いてあるんだろうね。
リモートホストの設定変更などをNet::SSH::Expectで、 自動化してやらせようとしています。 これってリモートホストからの反応の速さに関係なく、 必ず設定したタイムアウトの時間まで待ってしまうのですが、 そういう仕様なのでしょうか?
tentakelとかつかっとけ
35 :
デフォルトの名無しさん :2008/07/15(火) 23:04:37
my $hoge; という変数があるとき この変数が宣言されただけか、なにか値が入れられたかを 判定する方法ってありますか?
>>35 defined $hoge
で、undef か否かを判定する事は出来るよ。
37 :
35 :2008/07/15(火) 23:32:58
>>36 ありがと。これで納期に間に合いそうです。
print を使い何行もの文章を書く場合 毎行はじめにprintと書いているのですが、 これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
いいかげんにしてくれ
print q{print を使い何行もの文章を書く場合 毎行はじめにprintと書いているのですが、 これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?};
print << "MULTIPLE_LINES" print を使い何行もの文章を書く場合 毎行はじめにprintと書いているのですが、 これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか? MULTIPLE_LINES
ミスったorz print << "MULTIPLE_LINES"; print を使い何行もの文章を書く場合 毎行はじめにprintと書いているのですが、 これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか? MULTIPLE_LINES
>>44 何か有名な解説本に載ってた解法。
(都合上 indent は全角でやってるが、半角 x 4 に置き換えてくれ)
sub del_ind ($$){ ( my $in = $_[0] ) =~ s/^\s{$_[1]}//gm ; $in ; }
my $bar = del_ind <<' EOF', 4 ;
hoge
foo
bar
EOF
print $bar ;
46 :
デフォルトの名無しさん :2008/07/16(水) 23:12:30
#__END__ 以下に複数のドキュメントを含めたければ、ラベルで区切って、それを切り出すサブルーチンを作れば良い。 #変数展開したければevalするよろし。 print <DATA>; __END__ print を使い何行もの文章を書く場合 毎行はじめにprintと書いているのですが、 これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
47 :
デフォルトの名無しさん :2008/07/17(木) 16:58:15
systemのstdoutを配列に入れ込むことはできませんか?
何がしたいのか今ひとつ理解できんが多分できるよ。
すみません 途中で送信してしまいました。 my @test = system( 'ls'); としているのですが、lsの内容がstdoutに出力されてしまい、@testには代入されません。 @testにls(他のコマンドの場合もあります)の出力を代入したいのですが、 そのような方法はありませんか?
>>49 qx演算子とかopen関数とか
詳しくはperlop, perlfunc参照
>>49 lsコマンドの変わりにglobとかstat使っても良いよ。
52 :
デフォルトの名無しさん :2008/07/17(木) 17:26:52
.∧_∧ (`・ω・) ……むぅ、のってないよ /ヽ/⌒/⌒/ ⌒`⌒
54 :
デフォルトの名無しさん :2008/07/17(木) 19:51:30
>>52 に補足で
lsを囲んでるのはシングルクォート「'」じゃなくて、バッククォート「`」だよ
見づらくてすみません
$nullpo = "・ω・'" ; if ( $nullpo =~ /\'/ ) { print "\(’$`\)"; }
> ありがと。これで納期に間に合いそうです。 いくらもらってるの?
perl -MEncode -le "print encode('cp932', qq(
>>55 \x{30AC}\x{30C3}))"
2次元配列で、List::Utilで最大値を求めたい場合は $max = List::Util::max(@$foo[0]); ではだめなのですか?
template-toolkitで複数の関数を定義した外部ファイルを読み込み 実行したいのですがスマートなやり方はありませんでしょうか。 以下のような感じです。 ---main.tt2--- [% INCLUDE sub_func.tt2; hoge(111); fuga(222); %] ---sub_func.tt2--- [% MACRO hoge(n) BLOCK; 'hoge = ' _ n; END; MACRO fuga(n) BLOCK; 'fuga = ' _ n; END; %] 期待する結果:hoge=111fuga=222 実際は何も表示されません。恐らくスコープ関係かなと考えます。
>>58 max map {max @$_} @foo
thx でけますた
>>59 localizeしたくないときはINCLUDEじゃなくてPROCESS
63 :
59 :2008/07/18(金) 16:31:06
>>62 ありがとうございます。お教えいただいた方法で希望の動作が出来ました。
標準的なPerlにて、C言語のような符号なしchar型を使いたいのですが、 明示的に宣言する方法はあるでしょうか。 具体的には $hensuu = 0; $hensuu--; print $hensuu; 出力結果 : 255 という処理を行いたいです。 現在は$hensuuの内容を判断し、0~255の範囲に丸めています。
%256
& 255
67 :
64 :2008/07/18(金) 22:19:17
>>65 ,66
ありがとうございます。明示的な型宣言は無理で、利用する際に下位1バイトだけを
持ってくるしかないんですね。勉強になりました。以下実行速度です。
$ time { ./65.pl; }
255
real 0m0.133s
user 0m0.030s
sys 0m0.077s
$ time { ./66.pl; }
255
real 0m0.144s
user 0m0.046s
sys 0m0.062s
後学のために、ついでに質問させていただきますが、
$hensuuを大きな配列($hensuu[0xFFFFFF]など)として利用する場合、
メモリ消費を節約しようと考えたら、pack/unpackなどを使い自分でデータを管理した方が早いでしょうか。
是非をお答えいただけたら幸いです。
68 :
デフォルトの名無しさん :2008/07/18(金) 22:51:05
> 明示的な型宣言は無理 あんたがPerl(データに型は無いが、演算子には厳格な型がある)を使うのは無理、とも言う > メモリ消費を節約しようと考えたら、pack/unpackなど pack以前/unpack以降のメモリ消費量を考えていない、とも言う もっtieないお化けが出ちゃうぞ
出来ないなら出来ないって、なぜ素直に言えんの? 決して恥ずかしいことじゃ無いんだよ。
> あんたがPerl(データに型は無いが、演算子には厳格な型がある)を使うのは無理、とも言う 型のオブジェクト作れば厳格にできるじゃん。
>>68 は分かってる振りをしたくて必死なんだからあんまりいじめちゃよくない。
メモリ領域を食いつぶすほど大きな数値matrixを扱うときは素直にcで書いてるよ。 それほど大きくはないけど速度がほしいときはInline::C。
Cはlargeモデルで書いてもセグメントの境界をまたげないので無理
> Cはlargeモデルで書いてもセグメントの境界をまたげないので無理 それいつの時代の話?w
最近の OS でもコールゲートでセグメント切り替えとかやってんの?
ギチギチ・・・・。゚ ゚ < ̄ω ̄・> ←
>>78 / ̄ ̄||uu.|| ̄ ̄\ コナー
/ __||UU||__ \
._ | | | |
| |===| |===========| |llO
∧_∧ | | . | | | |
( ・∀・) | |. |__| |__|
=U==U==|_|
>>67 「利用する際に下位1バイトだけを持ってくる」風な機能を投げやりに自動化してみた。
使い方は、お好きな変数を
tie $var, 'CharLike';
するだけ。
以下 CharLike.pm:
package CharLike;
use strict;
use warnings;
use utf8;
use Tie::Scalar;
our @ISA = qw( Tie::StdScalar );
sub FETCH { return ${ $_[0] } % 256; }
1;
81 :
デフォルトの名無しさん :2008/07/20(日) 23:29:28
ファイル自体をutf-8で書いても、 use utf8と書いておいたほうがいいのでしょうか?
>>81 utfプラグマはファイルをUTFで書いたときに使います
83 :
82 :2008/07/20(日) 23:52:15
おっと。 なぜか8を二回とも書き忘れた
ま、ようするに、utf8 で書いてあるのかどうか、perl には自動で判断出来ない ってこと。 php だと php.ini ってファイルにデフォルトのエンコーディングを設定したりするよな。 MySQL も my.ini にデフォルトのエンコーディングを設定するところがある。 java は デフォルトで Shift-JIS だよな(Windows の場合) perl には 「デフォルトのエンコーディング」 ってのは無いんだな。
> ま、ようするに なにを要するとそういう意味不明な答えが出るの?
86 :
デフォルトの名無しさん :2008/07/21(月) 09:32:56
php.iniって、1サーバーに1つしか設定できないから、「俺はSJISだい!」「いや俺はUTF8でい!」「セッションタイムアウトは20分に決まってんだろ!」「バーカPHPのセッション機能なんか使えるかボケ!」っていう複数プロジェクトが同居できないんだよな。
いまだにPerlとPHPを比べたがる人がいるのかよw 好きなほう使えよw
昔、つっても数年前だが、Perl vs PHPの論争が活発だったころは面白かったな~ まぁ、結局WebはPHPの一人勝ちか
>>4 の日本語処理ができるとは具体的にどういうことができるのですか?
正規表現とか、substr とかで切った貼ったできるって事。
92 :
88 :2008/07/21(月) 10:20:45
5.10になって速くなった気がする
64bitOSってPerl早くなるの?
早くなるよ。CPUのクロックが早くなった分。
CGIの正規表現で(月)など()ごと曜日を消したかったので $date =~ s/\([月火水木金土日]\)//g; というのでやってみたんですができなかったんですが どうすればいいでしょうか
>>97 正規表現でマルチバイト文字を使うと、誤作動することがあるけど
それなんじゃないかなあ。
$dateには何が入ってるの?
必ず「2008年07月22日 (火)」みたいな文字列が入るって分かるなら、
日付だけ抜き出した方が早いかも
入力文字のコードセットが分かってる場合は 曜日文字のコードを直接してもいいかも
>>98 >正規表現でマルチバイト文字を使うと
そうなんですかわかりました
>$dateには何が入ってるの?
元は2chのdatなので「2008/07/22(火)」みたいな感じです
>日付だけ抜き出した方が早いかも
よくわからないので手ほどきお願いします
>>99 よくわからないです。初心者ですみません。
>>100 んじゃこんなんで
$date =~ s/([0-9]+)\/([0-9]{2})\/([0-9]{2}).*/\1\/\2\/\3/;
>>101 おお!できました。ありがとうございました!
お、おめでとう('A`)
テキストファイルの内容を別のテキストにコピーするプログラムを open(makefile "makefile.text"); open(mainfile "ARGV[0]"); print makefile <mainfile>; close(mainfile); close(makefile); と直感的に書いてみたのですが、実際には何も書き込まれていない makefile.htmlが出来上がりました。 ARGV[0]のところか、print makefile <mainfile>; の所に問題がある気がするのですがよろしくお願いします。
open(makefile ">makefile.txt")
> open(mainfile "ARGV[0]"); これ、いったい何がしたいの?他人に説明できる? いま自分が何をしているのか、自分でわかって無いでしょ? perl 本を読むとか、ネットで検索するとか、少しは努力をしてから 質問しなさい。
コマンドラインからファイルのパスを与えているので それを開いてくれればと思ったのですが。
open FH,・・・ と、 open $fh,・・・ の違いは何ですか?
Perlやった事ないけど"で囲ったら文字列として扱われるんじゃないの? あと書式は$ARGV[0]だった気がするんだけど
111 :
110 :2008/07/22(火) 12:32:45
あ、変数展開されるんだ・・何でもなかった全て忘れて欲しい
>>111 いいえ!!
助かりました。
うまくいきました。
ありがとうございます。
UNIX環境でテキストを配列に読み込むとき、面倒くさくて「@str = `cat hoge.txt`」なんてやっちゃうけど、 コマンドのリダイレクトを多用するのって、やっぱマズいんですかねー。 ロックが必要な時はちゃんとopen/closeするけど、readonlyなログなどは `cat log | tail -l 3`みたいに、一行で済ませることが多いっす。 これについて詳しく解説してあるサイトないかな。 ちなみに ・配布目的ではない。Windows環境では使わない。 ・最低限の基本コマンド程度しか使わない。 ・外部から入力される変数をコマンドに丸投げしない。 といった状況ですー。
ちゃんと動いていて重くて困ってるわけでもないんなら別にかまわんのじゃない? そのものずばりではないが、ラクダ本の「24章 Perlの常識」あたりを読むと気が 楽になると思う。
>>114 おお、ありがとー。掘り出して読んできます。
これ自体は問題ないとしたら、最近のPerl入門書やらPerl対PHPみたいな論争のお陰で
本来のグルー言語的な使い方のほうがイレギュラーになってのかなあ。
肩身狭く感じるわー。
もっと自分を主張せよ!!
あるファイルから、他のファイルを読み込んでそのファイル内に記述がある$hogeなどの変数文字列を変数の内容に置き換えるにはどうしたらいいでしょうか?
(1) ファイルの中身が信用できるなら or 男なら黙って eval (2) 君が変数だと思うものをパターンマッチで抽出して、値に置換 (3) Template Toolkitとか使った方がいくない?
(2)で解決しました。 s///で置き換えを行っていたのですが、エスケープしてなかったせいで置き換えができていなかったようです。
perl -ple 1 in.file > out.file #
>>105 には秘密
copy なんとか.txt makefile.text
122 :
105 :2008/07/22(火) 21:39:52
>>120-121 じつは書いていなかったのですが、
textの中身をHTML化するプログラムを作っていたので
あれで良かったのです。
<pre>タグの間に入れたかったのです。
ありがとうございました。
123 :
120 :2008/07/22(火) 22:20:59
>>122 ならこうかな。
perl -nle "1-$.||print'<PRE>'}continue{print}{print'</PRE>'"
124 :
105 :2008/07/22(火) 22:33:35
>>123 コマンドライン一発でできるんですね。
<html>
<head>
エンコード宣言(長いので省略)
<title>sth</title>(sthはsomethingの略)
</head>
<body>
<pre>
ファイルの内容
</pre>
</body>
</html>
を出力するのはどうなるでしょうか?
かなり長くなるのでプログラムにしてみたのですが・・
125 :
105 :2008/07/22(火) 22:34:49
かなり長くなる=>かなり長くなりそうな です。
126 :
123 :2008/07/22(火) 22:38:18
perl -nle "1-$.||print'<pre>';print}{print'</pre>'" # これでよかった。チラ裏失礼。
BEGINとENDのほうが可読性が高いな
echo '<pre>' | cat hoge.txt | echo '</pre>' > out.htm なんつうか、コマンドラインでやるんだったら、わざわざPerlを使うまでもない気がするが
129 :
105 :2008/07/22(火) 23:04:27
>>128 そうなんですよ
ですから私も以前shell scriptで作成しました。
UNIXの資産も利用できますし
ですが学習のためにperlで書き直してみました。
htmlのライブラリなど有るのでしょうか。
現在は<title>と</title>のように対応するタグを
一回一回書き込んでいるのですが、
まあ使い捨てのつもりでとっさに書いたので良いのですが。
効率化の方法が有ればよろしくお願いします。
>>129 ・・・あのさ。学習のためにPerlって言ってる割には
基本的なファイル入出力も直感で書いてるよね、お前。
ちょっと調べれば出てくる入門レベルの質問をしてるって分からないのか?
>>129 そゆことなら HTML::Template を調べるのが吉ぽ。
132 :
200000000000 ◆TFmStiahY2 :2008/07/23(水) 00:01:20
特定のディレクトリの中身のファイル全てに対して一括処理を行ってます。 readdirって文字数の長すぎるファイルがあると止まったりしませんか? 対応策ご存知でしたらどなたかご教授ください・・・。
>>133 バグレポして直してもらうのが筋だと思うが
lsの出力を食ってなんとかするとかそういう
手は考えられるな
>>134 バグなんですか・・・。
そちらのヒントを参考に(win機なんで)dir使ってなんとかしてみます。
ありがとうございました。
つか、質問の仕方が幼稚。 >文字数の長すぎるファイルがあると止まったりしませんか? 「長すぎる」じゃ誰にもワカランだろ。 もっと具体的に、たとえば「100万文字を越えると止まる」みたいに書かんとダメやろ。 perl よりも前に、コミュニケーション能力を学習しろよ。
>>136 100万行を指定したところで、MMX時代マシンとメモリ実装8GBの最新マシンだと結果は歴然。
じゃあファイル名の長さは?属性などの情報は?
言い出したらきりがないのがわからんのかこのすかぽんたんめが。
じゃぁおまいは病院に行って医者に「グワイが悪いので治してください」とでも言うのか? 頭が痛いのか、腹が痛いのか、ケツの穴が痛いのか、くしゃみが出るのか、変な汁が出るのか いったいどうしたんかハッキリ言わんと、名医ブラック・ジャックにも治せんよ? 幼稚園児みたいに「頭が痛いでちゅかぁ~?ぽんぽんが痛いでちゅかぁ~?」って聞いてもらわんと 自分からは言えんのかよ? それとも、「言い出したらきりがないのがわからんのか」と逆切れするつもり? なぁ、幼稚園児さんよ。
「言い出したらキリがない。だから言わない」 (笑)
幼稚な質問に対して「質問が悪い」って言ってるやつほど滑稽だよな。
質問者の大半は「何が患部なのか」すらも分かってないのにw
>>138 例えがきもすぎ。気に入らない質問なら黙ってスルーしとけよな、カス。
幼稚呼ばわりやコミュニケーション能力うんぬんを持ち出す時点で
ちゃんと説明する気はないんだから、
>>136 みたいなやつこそスルーしとけ
>>135 perlのファイルシステム周りの関数はホントどうしようもない。
未だにA関数つかってるし、どうせMAX_PATH超えて引っかかってるんだろ。
もりあがってまいりました。 2008年(夏)
> perlのファイルシステム周りの関数はホントどうしようもない。
ナオシテ( 'Д`)
>>142
>>140 質問だけでなく、気に入らないレスもスルーしとけよな、カス。
あ、他人に許さない色んなことを、自分にだけは許してるタイプの人?w
大漁だな
釣り宣言で逃げるその時までイジるだけのこと
ここもID表示にして欲しいな
ここまでカスの自演
150 :
デフォルトの名無しさん :2008/07/23(水) 09:52:19
みんな仲良く
エスパーの俺から言わしてもらうとutf8 flaggedなパスに日本語ファイル名をくっつけて開こうとしているだけだな
じゅもんせつやく
*「 ふっかつの じゅもんが ちがいます。」
すいません WWW::Mechanizeをつかってlivedoorブログに投稿テストを しようとしているのですが、投稿ページ中のテキストフィールド名が title,tagまではエラーが出ないのですが本文の部分のテキストフィールド名 でエラーが出てしまいます。(ソースコードを見た所bodyと言う名前だったと思います。) no such field 'body' at /Library/Perl/5.8.8/WWW/Mechanize.pm line 1371 途中でソースを出力するようにしたのでログインはできている事が確認できました。 そこから先で詰まっているのでよろしくお願いします。
perl って、よくエラーが出ますよね?どうしたらいいですか?
エラーメッセージを読めばいい。
157 :
154 :2008/07/23(水) 20:18:11
ちなみに私は
>>155 では有りません。
一応自分でググって粘ってできました。
ですがエンコーディングが・・・・EUCに変換して投稿しなければ・・・
盲点だった。
がんばります。
158 :
154 :2008/07/23(水) 22:04:54
perlプログラマとしてどうかとは思うのですが、 UNIXのnkfの力を借りてEUCにファイル全体を変換して実行すると きれいに投稿する事ができました。 ありがとうございました。
>perlプログラマとしてどうかとは思うのですが
160 :
154 :2008/07/24(木) 00:14:43
>>159 言葉が違う事に投稿した後できづきまして・・
perlプログラマの方は良くないと思うと思いますが。
ですね。
162 :
デフォルトの名無しさん :2008/07/24(木) 02:10:39
perlの勉強を始めたばかりなのですが 画面のある一部だけを保存するようなPerlを作成したいと思っています 矩形のサイズをあらかじめ決めておきPerlを実行した際に 画面野左上などから 何ピクセル移動したところの矩形の部分ををBMPとして保存するものを作りたいと思っているのですが PerlでBMPの保存するのに何かいい関数は無いものでしょうか もし何かいい関数などがありましたら教えてください
勉強初めたばかりなら関数リファレンスを流し読みでも良いから全部読むといいよ 何がPerlに向いてて何が向いていないのかがおぼろげにわかる
その気になれば、UNIXでもWindowsでも
>>162 のようなことは可能だけど
質問の具合から見ると全くPerlのことを理解してないんだろうなぁ・・・。
余談だが、世の中にゃPerl-SDLなるものもあるから、Perlで3Dオンラインゲームみたいなのも作れんこともない。
>>157 スクリプト内部で utf8 フラグ付の文字列操作をするなら、
入力が UTF-8 でも Encode::decode('utf8', $str) しないといかんです。
出力が UTF-8 でも Encode::encode('utf8', $str) しないといかんです。
外してたら失礼。
166 :
154 :2008/07/24(木) 07:44:51
>>165 ありがとうございます。
早速導入しました。
私のUNIX端末はUTF8が基本エンコードなので
入力文字列を出力前にEUC-JPに変換しておいて実行した所
無事に投稿できました。
UTF8ベースの鳥ってFedoraだっけ
>>162 > もし何かいい関数などがありましたら教えてください
CPAN
半角79文字毎に改行しようとして、以下のようなスクリプトを書きました。 これだと、全角文字を分断する可能性があります。 正規表現を使って出来るだけシンプルに全角文字を分断しないようにするには、 どうしたらいいでしょうか? 入力される全角文字は半角英数を含むShiftJIS固定、Perlはv5.8.8です。 #!perl my $herpussy = <STDIN>; my $mystick = 79; $herpussy =~ s/([^\n]{$mystick})/\1\n/g; print $herpussy;
早い話、走査していって、 改行を挿入する場所の直前のバイトが0x82だったら、 $mystick-1の位置に改行を挿入、そうでなければそのまま挿入とやってみたいのです(´・ω・`)
>>168 だな。
screenshotで検索すると、それっぽいのが出てくるし。
173 :
154 :2008/07/24(木) 10:28:29
プログラム内から直接投稿する形式をとっているのですが。 本文を入力する際 print "本文:"; $body = <STDIN>; としているのでどうしても一行しか投稿する事ができません。 この問題を解決するにはどのようにすれば良いのでしょうか? 今思い浮かんでいるのは 1,テキストファイルを引数に入れてもらいそれを本文にする。 2,何らかの方法で入力中に文末である事を明示する仕組みを実装。 2に使える関数など有ればよろしくお願いします。
>>173 それは自前のロジックで処理すべきもんだろう。
「"q"1文字+改行が入力されたら終了」とかのロジックを入れてwhileとかで回しとけ。
@body = <STDIN>;
176 :
154 :2008/07/24(木) 10:45:13
>>174 その場合qを本文で入力したい場合どうしたら良いのでしょうか?
例
vimのキーバインド解説!!
:q
とすると・・・・投稿されたー!?という自体が起こりえる危険を感じます。
ただ、何となく方向性は見えてきました。
ありがとうございます。
>>175 ありがとうございます。参考にします。
^Dとか^Zとかでいいじゃん。
178 :
154 :2008/07/24(木) 10:58:38
>>176 > その場合qを本文で入力したい場合どうしたら良いのでしょうか?
端末からの入力なのか? 昔から、"."のみの行を終端とするのが多いな。
行頭の".."は"."に変換されると言うようなルールを入れて。
180 :
154 :2008/07/24(木) 11:56:01
>>179 端末から直接投稿できるプログラムを作成したく思っていまして。
一行だけならなんとかできたのですが。
数行にわたる文章を変数に代入して操作するのがうまくいかなくて困っていたのです。
標準入力から読むのなら、普通に書いて最後に^Dで通るけどな。
182 :
154 :2008/07/24(木) 12:16:01
ああ・・・・なんだかこんがらがってきた。 body: 今日は今perlでブログに投稿しようとしています。 数行にわたる文章を投稿したいのですがどうしようか迷っています。 . と書くと $mech->submit_form(form_name => 'ArticleForm', fields => { title => $title, tag => $tag, body => $body,←此処に代入されて 今日は今perlでブログに投稿しようとしています。 数行にわたる文章を投稿したいのですがどうしようか迷っています。 が投稿される様にしたいのです。 そもそもWWW::Mechanizeを使っているのが間違いなのでしょうか? よろしくお願いします。
勝手に一人で迷ってろ!
184 :
154 :2008/07/24(木) 12:54:59
>>183 わかりました。
自分で迷います。
さんざんスレ汚しすいませんでした。
185 :
デフォルトの名無しさん :2008/07/24(木) 13:52:13
質問です。perlで掲示板(別に掲示板でなくてもショッピングカートや商品リスト生成 といったものでもいいですが)をオブジェクト指向でつくるメリットてなんでしょうか? メリット その1 クラスをモジュール化することによる改良しやすいプログラムになること その2 メインプログラムはモジュールつかって書くので変数のバッティングを気にしなくてもいい。 ということでしょうか?しかし、 その1については別にOPPのモジュールにしなくても単なるサブルーチンモジュールでやっても 改良はやりやすいだろうし。 その2についても、変数が1000とかのオーダーでないかぎりしっかりと仕様をおって変数定義 していれば間違わないとおもうし あえて掲示板でOPPを使うメリットとはなんでしょうか?
o-phenylphenol?
デメリットが特に無いから。
OPPってなんだ?
オッパッピーだろ
> しっかりと仕様をおって変数定義していれば間違わないとおもうし こりゃ無理そうだな。
@textに テスト文です。 複数行にわたっています。 を代入して,$make_textに テスト文です。<br>複数行にわたっています。<br> を代入できるように変換したいのです。 どのようにすれば実装できるかお願いします。
192 :
デフォルトの名無しさん :2008/07/24(木) 14:51:14
すいません、OPPじゃなくOOPのことです。
>>190 まぁ、カプセル化したほうが安全ではありますが。。。
>>191 my $make_text = join '<br>', @test, '';
>>185 > 質問です。perlで掲示板(別に掲示板でなくてもショッピングカートや商品リスト生成
> といったものでもいいですが)をオブジェクト指向でつくるメリットてなんでしょうか?
OOPについてこられないほど頭が悪いバグ生産器を排除できること。
Catalyst使って楽をしようと思うと自動的にoopになっちゃうけどね
>>176 それは単なる一例だから。何もqに限らなくていいじゃん。
他の人が言ってるけど、割り切ってEOF(UNIXなら^D、Windowsなら^Z+改行)でもいいし。
>>185 (ある種の)if文を書かなくてよくなることがOOP最大のメリット。(俺主観)
if (商品->{種別} == A) { 処理1A(商品) } elsif (商品->{種別} == B) { 処理1B(商品) }
...
if (商品->{種別} == A) { 処理2A(商品) } elsif (商品->{種別} == B) { 処理2B(商品) }
みたいなコードがあちこちにあった場合、商品の種別が変更される毎に、悪夢のような修正が待っている。
そもそも0から書く場合でも、いちいちif文をずらずら並べるのはものすごく面倒くさい。
ところがOOPで書くと、そもそもif文自体が不要になる。
商品->処理1;
...
商品->処理2;
こうなると、商品の種別に変更があっても、呼び出し側を修正する必要性を大きく減らすことができる。(※正しく設計すれば)
なにより、面倒くさくないのが良い。
(正しく設計されていれば)関数型よりも再利用がしやすくなる。 いわゆるデザインパターンが利用できる。(しやすくなる) 関数(メソッド)間の変数の取り回しが楽になる。 って感じかなぁ
OOPのメリットじゃなくて、比較的簡単なモノを作る際にOOPにするメリットの話だろ?
200 :
デフォルトの名無しさん :2008/07/24(木) 18:20:57
>>194 たしかに、開発者のレベルの足切りにつかえそうですねw 自分は継承までは
使いこなせないです。いや、継承をしてメリットがでるようなプログラムは
まだであったことがないといったほうがいいのか。
>>197 メインプログラムでif分を減らせるってことですよね?そして変更は
モジュール部分で行なえるし、そのモジュールを使うほかの各種メインプログラム
自体はいじらずにすむ。ということですよね。
たしかにOOPでつくるとメインプログラムがメモ帳というか箇条書きチックになって
みやすいし面白いですね。その分、モジュールの設計が鬼のように大変ですけど。
>>198 これは、開発してきたOOPモジュールを部分的に再利用したりってことですかね。
継承とかではなくて。 あとはひな形みたいなものをつくっておけばコピペで
基本的なモジュールも専用につくれますしね。
>>199 いや、ヒアック的簡単なものという限定ではなくてもおっけいです。
ただ、掲示板は例は基本的なテクニックが網羅されているっていう点で
あげたわけです。
201 :
デフォルトの名無しさん :2008/07/24(木) 18:28:50
ちなみに、私が掲示板をOOPでつくるとしたら、各クラスは HTMLモジュール=HTMLのヘッダーやフッターやその他を組み立てる部分 ファイル、データ関係モジュール=データの読み込みや書き込み、 フォーム処理、そしてそれらデータをひな形HTMLに合成したHTMLのパーツを生成する部分 当然、ここがOOPプログラムの中枢になるモジュールで、変数の扱いで無名ハッシュ、リファレンス とつかった多次元配列などのテクニックを使う。またデータを扱う部分なので当然、データの 整合チェックを行ないエラーカウントやエラーメッセージパーツを生成する部分でもある。 アカウントモジュール=ユーザーアカウントの認証、セッション発行や、不正アクセス 行為のアカウントロックなど行ない、エラーカウント、メッセージを生成 その他モジュール=上記以外で必要になるパーツを用意するクラス これらのモジュールをつかって、メインプログラムでは必要となるモジュールを 動作させる。という感じなのですが。
そうやって綺麗に分けてあると アカウントや出力スタイルを共有する 別のプログラムを作りたくなったときに便利だな。
酷過ぎてワロタ
>>182 $body . $_ while <>;
>>169 $herpussy =~ s/((?>.{78}))(.)/ $2 =~ /[\x81-\x9f\xe0-\xfc]/ ? $1 . "\n" : $1 . $2 . "\n" /eg;
# 未テスト注意
206 :
デフォルトの名無しさん :2008/07/24(木) 19:46:06
>>203 感想かくのは自由だが、質問スレなのにどこが具体的にひどいのか指摘しないのも
みていて痛すぎるよ。人を笑えないって。
207 :
205 :2008/07/24(木) 19:48:18
>>205 $herpussy =~ s/((?>.{78}))(.)/
my ($pre, $post) = ($1, $2);
($2 =~ m{[\x81-\x9f\xe0-\xfc]})
? (pos($herpussy) -1) && $pre . "\n" . $post
: $pre . $post . "\n";
/eg;
# あんまりだったのでセルフサービス
>>201 それは機能単位でシステムを分割してるから、OOPよりも構造化プログラミング寄りだと思うよ。
どうちがうのかと聞かれたら、俺はOOPは構造化よりもデータ指向プログラミング寄りだと答える。
209 :
デフォルトの名無しさん :2008/07/24(木) 21:08:39
>>208 レスありがとうございます。おっしゃっている意味はなんとなくわかります。
上の例でいうならOOPが問題になる部分はファイルやデータをあつかうモジュール
部分のクラスの書き方だとおもいます。 実際問題として掲示板のデータを考えると、
コンストラクタで生成したインスタンスに掲示板の投稿者や内容、日付といった
データをセットするわけですが、その構成方法のみを考えると、OOPのメリットは
なく、あるとすればアクセサ経由のカプセル化とほかのクラスとの連携を考えた上
での構成(構造化っていうんですかね)くらいかなぁとおもうんです。
>>202 ヘッダーやフッターや基本のミッダー表示だけなら、なんの面倒もなく
かけるし、ミッダー部分の処理だけあらためにクラスをつくればいいだけ
ですので、転用はしやすいですよね。
210 :
デフォルトの名無しさん :2008/07/24(木) 21:20:13
ええっと、OOPについての質問はもう一つあるんです。 よく解説書の説明で車などを例により、オブジェクトとして車をいくつも 生成できるでしょ!便利でしょ! みたいな説明がありますよね。あとは ゲームでいうと敵機をいくつでもコピーして画面にだせるでしょ!みたいな 説明もあります。 この考え方をperlによる掲示板プログラムに適用すると果たしてモジュールは どういう構成にすればいいのか? という点です。 正直いって、自分はまったくわかりません。車に相当するものを投稿データと するならば、投稿データオブジェクトクラス なんかをつくったとしましょう。 それをメインプログラムの方で、必要な投稿数だけ(たとえば10件表示した としましょう)ひとって出力するとすれば、メインプログラム内で 投稿データオブジェクトクラスを10回ループして、一つ一つの投稿のデータ はループの中でメインプログラムのスコープで配列にし、それを10回くり 返すことになり、結局、投稿データクラスで生成したオブジェクトを10回分 生成、破棄を繰り返すことになり、はたしてそれはメリットなのか?とおもう わけです。 投稿データの変数をインスタンスとしてセットしたならそのオブジェクトの 空間(スコープ)で、データを保持したいですよね。そうすると、投稿データの クラスのプログラムとしては、必要なデータ分をファイル分からとりだして、 その個数分だけインスタンスを用意して読み込んだ値をセットすることに なります。 あと、もう一つ、初心者として恥ずかしい疑問があるのですが、それはまた別に書きたいと おもいます。
オレオレ用語生成器は、優秀なバグ生成器でもある。
>>210 オブジェクト指向でうれしいのは多態性かな。
例えば、投稿のパターンが複数ある場合。
ある投稿は画像だけ、ある投稿はテキストだけ、ある投稿はHTMLで、ある投稿はDESで暗号化されてるとする。
でもカプセル化して、各オブジェクトのhogehogeメソッドを呼び出すことによって、必要な形(ここではHTML)に変換して出力するようにしておけば、
メインプログラムにおいて、投稿されたデータが何であるかを意識する必要がなく、
ただループの中でhogehogeメソッドを呼び出すだけ。
みたいな。
(結局データ読み込み部でそれを判別して、それぞれのオブジェクト作らないといけないけど。)
>>210 さっぱり意味不明。コード書いてどっかのアップローダに上げて添削してもらえ。
>>210 投稿データをクラスにする方向だとメリットはほとんどないと思う。
それよりは「掲示板システム」自体をクラス化するほうがメリットが出てくるだろう。
たとえば、 ・メモ帳 ・予定表 ・WEBメール これを1つのクラスから派生させるといいかな。 全体的に統一感が出る。 認証も一箇所で済むよね。
java とかさ、メイン側の if 文が減って、コードがずいぶん見やすいなぁ ・・・と思ったら、下位の関数側で if (obj instanceOf なんとか) { ・・・ } else if (obj instanceOf かんとか) { ・・・ } else if (obj instanceOf うんこっこ) { ・・・ } else if (obj instanceOf しっこっこ) { ・・・ こんなのが延々と続いてる、ってのをよく見かける。 単にメイン側の if 文を 下位関数に移動させただけ。 結局、仕様変更時の手間は変わらない。 再利用不能!
217 :
154 :2008/07/25(金) 00:08:01
無事完成しました。 皆さんにはとてもお世話になりました。 知らなかったテクニックなども沢山ご教授いただきありがとうございました。 Perlプログラマに幸あれ!!!
perl検定ってないの?
↑ もし仮にコレが国家試験だとしても、履歴書に書くのだけはやめような。
まともに答えたのに不合格言われた/(^o^)\
「Yahoo!Japan みんなの検定」 ↑ これはいったいなんだ?
Yahoo利用者たちが独自に「検定」と呼ばれるクイズを出題し、みんながそれに答えるシステムのようだな。
>>219 のような出題もあるので、効力も信憑性も皆無だ。
>>219 こ・れ・は・酷・い。(言葉通りの意味で)
print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; print "\a"; ↑これを実行しても音が出ないんだが?
それで?
今参考書読んでたら 「JPerlでないPerlでは、 文字クラス内の 日本語文字コードは 2文字すなわち文字2個に分解されるので、 同じ日本語文字コードとはマッチしません」 と書いてあるのだが、これ本当なの? 自分は無料で借りれるレンタルサーバーでCGIを 動かしているのだが、これってJPerlなのかな? すごい困るんだけど。
質問 Perlの正規表現、一度学んだら 別の言語でもそのまま使えるの?
232 :
Perl中級者になりたい :2008/07/25(金) 10:17:47
>>232 とりあえず至急に改善すべき点が1つ。クロスサイトスクリプティング脆弱性を何とかするように。
26, 31-34行あたり。他にもあるかもしれんが、まだ見てない。
234 :
233 :2008/07/25(金) 11:09:20
あと、改善されるまではそのCGI引っ込めておけ。
URLの正規表現は
>>3 あたり
せめてHTML出力は切り分けよう・・・
WebProgの方、perlで検索したら死ぬほどスレあってワロタw
Webの方ではあらかたPHPに移行したと思ってたんだが。
#
>>232 ってもしかしてコピペ?
238がちょっと残念なのは分かった
240 :
デフォルトの名無しさん :2008/07/25(金) 15:41:56
>>233 よこれすですが、
その行の部分の虚弱性ってのは、利用しているモジュールが変数のサニタイズを
していない可能性があるし、外部入力の文字(urlなど)がはいるところなので
ヤバい文字列をチェック削除置換しておけ!
っていう意味にとっていいですか?
Perlのメーリングリストに参加したいと思うのですが、 Googleで検索してみると沢山有るようでどれがベストな選択か 迷っています。 おすすめなMLをお教え願います。
comp.lang.perl.miscでいいんじゃないの? newsgroupだけど。
243 :
デフォルトの名無しさん :2008/07/25(金) 17:38:07
あるbmpの中に緑色の16FF6Dがあるか確認するスクリプトを書きたいと思っているのですが パターンマッチの仕方がわからない状態になっています ファイルをバイナリモードで開いて 16FF6Dがあるかパターンマチングをする 参考になるコードを教えていただけないでしょうか
小学校のとき、先生に知能に障害がある子のうちに遊びに行かされた 彼は脇目もふらずにドラクエ3をやっていて、正直、「こいつでもドラクエとかわかるんだなあ」と思った 三十分ほど彼のプレイを見ていて、とても悲しい事に気が付いた 彼がそのゲームでやっているのは、アリアハンの周りでスライムとカラスを倒す、ただそれだけだった。 パーティにただ一人の勇者のLvは50を越えていた。彼は永遠、素手でスライムを殺し続けた とても楽しそうだった 先に進めてやろうと思い1コンに手を伸ばしたら凄い剣幕で怒鳴られた。 なんて怒鳴られたか聞き取れなかったけれど、とにかく怒鳴られた それを見て彼の母親が「ごめんなさいね、○○ちゃんはファミコン大好きのよ」と僕に謝った 彼はドラクエ以外のソフトは持っていなかった 僕はそれ以来、ゲームをやらなくなった。以前のようにゲームにのめり込めなくなってしまったのだ。 コントローラーを握るとやるせなくなった。友達の家に行ってもみんながやるのを見ているだけだった その間、僕はゲームに興じる友達の背中だけを見るように努めた 本当にむなしかった その内に、僕はファミコンを憎むようにさえなった。今までの人生の中で、あんなに何かを憎んだことはない それは真夜中に僕を目覚めさせた ゲームなんかこの世からなくなってくれと本当に願った 僕はソフトを彼に全部あげて、本体は捨ててしまおうと思ったが、兄に怒られそれすらできなかった。 一人暮らしをしている今でもゲームは嫌いだし、もちろん家にも置いていない。 時々、彼と、永遠に世界を救えなかったであろう彼の勇者の事を思い出すと、とても悲しくなる
とても悲しくなる まで呼んだ
悲しい。ただただ悲しい。
ゲームもドラクエもしないから面白みがわからん
248 :
デフォルトの名無しさん :2008/07/25(金) 18:32:12
ドラクエが彼の人生のみならず家族の人生までも救ったことに 気がつかない人は多い。 ちゃんころだからしょうがないか。
249 :
デフォルトの名無しさん :2008/07/25(金) 19:51:21
つ~か、上の例の知能障害がドラクエやっている例と健常者がドラクエをやっている ことの差ってのは、基本的レベルまでおとしこめば、差はないとおもう。 プログラムやっている人ならそれくらいわかるだろ。結局はゲームという枠組みの 中でさるのように(受け身にしかなれないわけだが)なってシコシコやっている姿 は障害でも健常でもかわらないこった。 唯一違うことは、物作りだ。244はゲームのむなしさに気がついたのだろうか。
正規表現において、繰り返しマッチであるgオプションをつけたときの\Gの意味がよくわかりません。 「パターンマッチングが終了した場所を記憶しておき、そこにマッチ」という説明がされていますが、 なんのことやら。。。 例題を用いて挙動を説明してもらえると嬉しいです。
前回のマッチで食い終わった場所
>>240 渡されたデータを生のまま出力すんな、くらいのつもりだったけど。
MVCで考えると、表示において異常を生じないようにするのは原則
としてViewの責任なので、Viewに相当する部分を指摘すべき箇所と
考えた、というところ。
# あと、個人的には、適切なバリデーションと適切なエスケープを
# していれば、サニタイズという考え方は必要ないと思ってる。
前回のマッチ位置にマッチするだけ。
254 :
デフォルトの名無しさん :2008/07/25(金) 21:06:09
>>249 あれから20年たって、まだスライムを倒し続けているのを知ってもそう思えるか?
255 :
250 :2008/07/25(金) 21:06:52
あっ、わかりました
参考書読んでたら、CGI使うときに、 出力バッファをフラッシュするために、 一番上の行に $| を必ず書くように、との記述がありましたが、 そうなの?
どういう理屈で以下はハッシュになるのでしょうか? %も出てこないのにわけわからん。 @hash{a,b,c} = ();
>>256 $| = 1;
の間違いじゃないの? もし本当にそう書いてあったら、そんな参考書捨ててしまえ。
あと、1リクエスト内で時間のかかる処理をやるのでなければバッファリングを解除する理由はないと思うが。
>>254 他のゲーム好きは、わざわざ別のソフトを買って
だいたい同じことをやってるわけだからな。
どっちもどっちだ。
っ[ハッシュスライス]
>>258 初めて見た文法だった。
ハッシュスライスと言うらしい。
ちょっぴり感動した。
264 :
207 :2008/07/25(金) 23:33:40
>>259 もう一度よくみたら、たしかにそうでした。
>>259 そんで、
「出力のバッファをフラッシュしないと、
デッドロック問題が起こるから、そうしろ」
って書いてありました。
267 :
デフォルトの名無しさん :2008/07/25(金) 23:55:56
>>254 260の意見と同じく、ほかのゲームにしろやってることは根本的にかわらない。
だから障害児のやっていることと健常者がゲームに夢中になっていることは
本質的に大差ないんだよ。画面みてパッドをシコシコやっているだけ。
当人にとってはそれが面白い行為なので、ゲームの束縛から脱却できた人もしくは
はなっからそういう行為は無駄だとラッキーにも経験的に知って自らは創作する
側や演奏する側、送り手側にたつことができた人からみれば、あわれにおもう。
俺個人も大事な時期なのにシューティングにのめり込んでいたけど、今はまったくやらな
くなった。こないだ久々に昔のゲームがどんなものなのかニコニコでみてみたけど、
よくこんな行為をあきもせず延々とやっていたなぁと、驚愕するだけだった。
質問 他人が書いたCGIゲームを改造するんですが、 local使ってるかな?と思って 「local」 でソースコードを検索かけたところ、 #!/usr/local/bin/perl とかまでもがひっかかってしまいます。 #!/usr/local/bin/perl とかは、検索にひっかかってほしくないんです。 localを変数として使っている局面だけ知りたいので、 こういう場合はどうすればいいですか?
>>268 "local"ではなくて、"local "で検索してみたら?
1行目は検索しないとか
>>270 そんなことできるの?
Windowsに普通についてる「検索」機能でやってます。
perl 関係ないじゃん
質問 CGIゲームなんだけど、 「いきなりサーバーにアップロードする前に ローカルでテストしてください」 とか書いてあるんだけど、 OSがwindowsでactiveperlをインストールして Windows用のアパッチを入れてあるんだけど、 ファイルロック用で、symlinkっていう関数があるんだけど、 これってWindowsでは動かない、って参考書に書いてあるんだけど、 それだともしかして、symlinkがソースコード中にあったら、 Windows環境では、ローカルでのテストは、できない、ってことなの?
symlinkはWindowsで言うところのショートカットを作るコマンドだからね。 はっきり言って、そんなもん使うならflockした方がいいと思うよ。 って、ここまで書いて、ここがム板だということに気付いた
質問 ハンドルって ファイルハンドルと ディレクトリハンドルの 二つしかない?
>>259 参考書を読むと、
「ApacheなどのWWWサーバでは、
CGIで標準出力に対してバッファリングを
行うとデッドロック問題を引き起こす可能性が
あります。必ずCGIスクリプトの先頭部に
次の行を加えておきましょう」
と書いてあるんですよね。
「必ず」
とかって書かれてるので、
「本当にそうなのかなぁ?」
って、一応は疑ってみたんですよね。
質問 参考書を読むと、 「Windowsでは、イメージファイルの読み取り時などに、 改行コードを変換するよう、binmode関数を使う必要があります。」 って書いてあるけど、「Windowsでは」って書いてあるってことは、 ひょっとして、UNIXでは、binmodeなんて使わなくてもいいんでないの? で、自分はWindowsでテストして、レンタルサーバーにアップロードして CGIを動かすんだけど、binmodeは使わないとだめなの? それって、テスト時のみ必要ってことなの?
質問 「#を使った場合、そこから後ろはコメントと みなされます」 って書いてあるのだが、ヒアドキュメントを使った 場合のみ、そのルールが例外になるんだよね? ヒアドキュメントだと、#があっても コメント扱いされず、そのまま出力されるっていう。
その質問文を書いてる間にチェックできることをいちいち聞くな
「ヒアドキュメントを使った場合のみ」 例外になるのか、って聞いてるんだー
>>278 じゃ簡単なクイズをやろう。
print "うんこ#ちんこ\n"
さて、どう表示されるでしょう?
>>277 UNIX には テキストファイル、バイナリファイルの区別が無いんだよ。
binmode は Windows でのみ効果がある。UNIX との違いを吸収するためのおまじない。
UNIX で使っても無視されるから、そのまま放っておいて構わない。
>>276 その前に、「デッドロック」 の意味がわかってるのかな?
>>275 それは、どこまでをハンドルと認めるかによって違うから
非常に答えづらい質問だ。おそらくみんな無視するだろうね。
>>282 print "うんこ #ちんこ\n"
こうなるはずだな。
あーでも、printを閉じるダブルクオーテーションがないよ。
だから、エラーになるのでは?
>>282 うちの環境では
うんこ#ちんこ
と表示された!ふしぎ!
>>285 いや、ハンドル、って名前がついてればそれでいいから。
夏が来た~~~!
質問 複数行のコメントで、 =pod =cut って説明と、 =comment =cut って説明と、二通りあるんだけど、 どっちが正しいの? それとも、両方とも正しいの?
あと __END__ この次の行からは、 なんでも好きなことを勝手に書いてもいいの?
1回ぐらいマニュアル読めよ。
試したら一瞬で解決する質問ばっかだな
来週海に行こうと思うんですがどの辺がいいでしょうか?
バミューダかな
>>267 perlのスレで何意味不明なネタを延々と続けてんだ。いい加減止めろ。
HTMLの<pre>タグ内で<を表示させたい場合lt;などと変換しなければ成りません。 また逆にlt;を表示したい場合<に変換しなければ成りません。 このような処理を行うにはどのようにすれば良いのでしょうか? 文章中で<だったものはlt;にlt;と書かれていた物は<に変換という 方法がわかりません。 よろしくお願いします。
>>298 CGI.pmの関数、escapeHTMLとunescapeHTMLの使用を検討することをお薦めします。
>>293 試したら一瞬で結果は出るが、なぜそうなるのか、理由が知りたいって事なんじゃないのか?
>>300 上のほうのレスを見ると分かるとおり、そういう意図で質問するやつなら
ちゃんとその旨を伝えるべきだと思うよ。やってるやつはやってるし。
これこれこういうことをやってみて、こういう結果になったが
仕様として規定されているのか、またその理由は?
という質問なら、ちゃんとレスが付いてる。
ここはCGIの質問も受け付けるようになったのか。知らなかった。
参考書によるととか言ってる奴は、書名と著者名かけよ。
304 :
デフォルトの名無しさん :2008/07/26(土) 16:01:11
そういえば、オブジェクト指向をテーマした解説サイトで >の文字がほかの文字に化けていて、なんという文法なんだってしばらく 分からずじまいだった。でオブジェクト指向やリファレンスやらの 表記になれてきたとき、そのサイトを読み直して文字化けだったと 気がついたw orz いいサイトなんだけど、そのおかげで初学者には超えられない壁になっていた。
print $words_arr[0]; print $words_arr[1]; みたいに、 配列や変数を複数連続してprintすると、 HTMLのソース内で変数の中身が hoge hoge みたいに改行されて表示されます。 これをブラウザで見ると、中身と中身の間に hoge hoge みたいに半角スペースが入ってしまいます。 中身と中身の間にスペースを入れずに表示させたいのですが、 何か方法はありませんか?
>>305 print join( '', @words_arr );
でうまくいくと思いますよ。
>>306 いや、ちょっとま違えた。
各項目に改行コードが入っているなら
print join( '', map({ chomp($_); $_; } @words_arr) );
かな。
chomp @words_arr; { local $,; print @words_arr; }
>>306-308 レスありがとうございます。。
どれも試してみたのですが、だめっぽいです。
ブラウザで表示させて、ソースを見ると単語が改行されて表示されてます。
色々試してみたのですが、どうもブラウザによっても違うみたいで、
IEやfirefox2だと、ソースで改行されててもスペースは入らないのですが、
firefox3だとソースで改行されてるとスペースが入るみたいです。
>>309 もしかして各項目に改行が二つ以上入っていますか?
正規表現で改行を全て取り除くという技もありますが。
print join( '', map({ $_ =~ s/\n//g; $_; } @words_arr) );
これはどうみてもHTMLの話
もっとソース出せばわかるんじゃない?
>>311-313 みなさんありがとうございます。
HTMLの問題でもあるっぽいんですが、
HTMLソースで改行さえされなければ何とかなりそうです。
open IN, "<mydata.dat";
my @words_arr;
foreach (<IN>) {
push( @words_arr, $_ );
}
chomp @words_arr;
print "Content-type: text/html\n\n";
for ( my $i = 0 ; $i < 3 ; $i++ ) {
print $words_arr[ int( rand(30) ) ];
}
ソースはこんな感じです。。
>>314 open IN, "./mydata.dat" or die $!;
chomp(my @words_arr = <IN>);
print "Content-type: text/html\n\n";
print $words_arr[int(rand 30)] . " " for 1..3;
俺が質問を理解できてないのかもしれないけど
「mydata.dat」の中身は適当な文字列で
こんな感じでやってみたけど、IE6でもFirefox3でも変わらなかったよ
どうしちゃったんだ、このスレ。 質問も回答もまるでWebProg板。
質問 なんでsystem関数だけ、 失敗したとき1を返すの? 普通は、成功したら1 失敗したら0 を返すものだと思ったましたが、 なんでsystem関数だけ、 失敗したときに1を返すの? 変態なの?
うん
最近分かったことなんだが、『perl』って『ペル』じゃなく『パール』って読むそうだ。 外国語って難しいな。
>>318 UNIX系のシステムコールでは「真(成功)が0、偽(失敗)が非0」。
UNIX系のシェルもそうなっている。
なぜそう設計したかというと、成功したときはその要因を詳しく調べる必要がないけれど、
失敗したときは「どのように失敗したか」という要因を戻り値として詳しく伝えたいから。
322 :
デフォルトの名無しさん :2008/07/26(土) 19:40:50
ぺるっちゃった
IDEの話なんだけどさ、 いろんなIDE40個くらい試してみて 体験レポートとかブログとかに まとめてる人とかっていないの? そういうマニアみたいな人
>>315 おお、そういう風に書くとカッコいいですね!
色々勉強になります。
あと試させてもらったのですが、
やっぱり自分の環境だとスペース入るみたいです。
板違いな質問っぽくなってきたので、また出直します。
ありがとうございました!
質問 型グロブとレファレンスについて。 型グロブとはPerl4の時代に使われた 古い仕組みで、主に変数の別名をつけるなどの 目的で使われた。 現在のPerl5では、型グロブなど使う池沼はいなくて ほぼ全部レファレンスで置き換えられている。 これであってる?
>>325 ちょっと間違えた。
Perl4の時代の型グロブの主な使い方は、
(1)
サブルーチンなどで、配列やハッシュのもつ値ではなく、
配列やハッシュ自体を指し示す「参照」を受け渡す
(2)
ファイルハンドルを渡したり、格納する
こう書いてました。
質問 NSAは日本語情報を実はうまく取得できていないのでは? なぜなら、ラリー・ウオールはNSAに所属しているときに、 「大量の文字列処理」 を行う必要性に迫られてPerlを作ったと 書いているが、Perlは日本語はあまりうまく処理できないので、 当然NSA内部でも日本語の情報はうまく扱えて いなかったのではないか、と推測される。
だからぁ、何に書いてあったのか、書名なりホームページなりを書けよ。
>>327 日本サーフィン連盟が大量の文字列処理をする必要あるのか?
大波小波を掻き分けてりゃ十分だろ?
>>327 勉強したいなら本ばっか読んでないで
プログラム書けよ
受験勉強じゃねーんだからw
俺はプログラミングには興味ねー
333 :
デフォルトの名無しさん :2008/07/27(日) 00:36:22
perlってNSAが開発したの? なんかものすごいバッグドアがありそうな言語だな。
>>333 NSAが開発したんでなくて、
ラリーがNSAに在籍してるときに
「大量の文字列処理」
を要求されて、それで仕方なく作ったのがPerl
そこで質問 Rubyの開発者は日本人なので、 日本語処理は得意なの?
なんかプログラミング言語って英語が多いみたいだけど、 誰か日本語のプログラミング言語を開発してくれないかな。
……夏か。夏なのか。
もうそろそろ飽きだよ
質問 なぜ、本などに書いてあることをここに丸々書き写して いちいち確認を求めるの?
>>343 ま、まさかキミ、「本に書いてある事はすべて正しい」・・・とか思ってない?
>>343 実は漏れは別の分野で
「本を書く側」
の人間なんだが、ウソやでたらめを
いままでも散々書きまくってきたため、
自分もデタラメを書いてるのだから
他人もそうに違いないと思って
本に書いてあることはいちいち
確認してから信用するようにしているのだよ
ところで別の質問 参考書を読むと 「$value = 5; よみやすくするため、スカラー変数と、=と、 値の間には それぞれ空白文字をいれます。」 と書いてあるのだが、それくらい自動でできないの? コンピューターでしょ?
>>344-346 なぜマニュアル読んだり、Perlの実装で確かめないの?を遠回りに聞いてるのだと思うぞ。
はっきり言って、2chの情報を鵜呑みにするとか、2chで確認するなんて頭がイカレてる。
349 :
デフォルトの名無しさん :2008/07/27(日) 02:38:06
NSAって国家安全保障局 National Security Agency のことじゃないのか?
print "あなたの名前を入力してください"; $a = <stdin>; chomp $a; print "こんにちわ、 $aさん\n"; ↑このスクリプトで、$aの直前に、全角スペースを 入れているのだが、そうすると、出力するときに 文字化けになる。 なんでだろう?
>>347 むかしむかし、ビジュアルベーシックのIDEが、そういう事をやってたが評判が悪かった。
コーディングスタイルに介入されると無性に腹が立つ。
「できるか、できないか」、では無く、「余計なおせっかいしてほしくない」 だ。
Can't use string ("名前") as an ARRAY ref while "strict refs" in use at - line 4, <STDIN> line 1. use strict したらこんなエラーがでた 配列リファレンスとして見られてるんじゃない?
ひょっとして、全角スペースが2バイト文字で、 1バイト目と2バイト目とで構成されていて、 そんで、そのどっちかが、アスキーコードで メタ文字と同じになっていて、それでおかしく なってるのかな?
全角スペースの第2バイトが@と同じコードで配列として変数展開
だからuse encodingしろっていってるじゃないですか
でも、いまWindows上でActivePerlでテストしていて、 これって最終的にはUNIXのレンタルサーバーにアップロード して使うので、そのときはuse encodingしないでも 動くのではないですか?
「Perlクエスト」 「おお、勇者よ、聞いてくれ、 実は悪い魔王が$を奪っていったのじゃ。 このままではスカラー変数を使うことができない。 そこで勇者よ、魔王の城に行って $を奪い返してきてくれないか」
質問 システムコールってあるじゃん。 そんで、システムコールって当然 OSごとに違うじゃん。 そしたら、perlのソースコード中に、 OSを判別するコードを埋め込んでおいて、 もしWindwsだったら、このシステムコール。 もしUNIXだったら、こっちのシステムコール、 とかって、分岐しないとだめなの?
だからぁ、1回でもいいからさぁ、マニュアル読めよ。
マニュアルなんか持ってないよ
質問 部分文字列の取り出しは、 パターンマッチ関連の演算子でやる方法と、 substr関数でやる方法と、 2種類あるわけですが、これの使い分けは、 何文字目なのか、 わかっている場合は、substr関数で決め打ち、 わかっていない場合は、 パターンマッチ演算子でやる、 こういう使い分けであってますか?
>>357 use encoding は全くお勧めしませんが、それはさておき、
「UNIXのレンタルサーバーにアップロードして使う」と SJIS 系における全角スペースの第二オクテットが ISO 8859 系の "@" と重複することに起因する不具合が解消するとお考えなのは何故でしょう?
問題の特性からして実行環境の種別とは直行していますから、ご提示の不具合に関する限り何ら影響しないはずではないかと愚考致します。
貴殿の仰るようにアップロードすれば正常動作するのであれば、それは素敵ですが、どうやら世界の計算機はまだ、その水準で空気を読むまでには進化していない模様です。
僭越ながら一般論を申し上げますと、ご自分でプログラムを書いて試される事は、夢見がちな持論を脊髄反射で衆人環視の元に投げ込み続けるに優る、最も手軽で効果的な学習方法です。
ついでと申しましては何ですが、失礼ながら公開のサーバで自作プログラムを走らせるのはまだ時期尚早とお見受け致します。
なにぶんこの点、公共の福祉に関する問題もございますので、今回の開発計画、あるいは今生の人生設計を慎重に再検討頂けますれば存外の幸いと存じます。
願わくはこれからも貴殿の Perl Life に幸多からん事をお祈り申し上げます。
「Perlクエスト2」 「勇者は宝箱を開けた! なんとprintを見つけた!」
>>363 いま使ってるのは、activeperlなのね。
でもUNIXにアップロードしたら、そこで動いているのは
activeperlじゃなくて、ちゃんとした本物のPerlなのね。
だから直るんじゃないかなーって。
質問 #!の読み方で、 「シーバング」 って書いてあるのですが、 バングはわかるとして、なんで #がシーになるのか、 教えてもらえますか?
喪前らヴァカじゃねーの?(藁 Perlは手間をかければPHPと同じ実行スピードに近づけることは可能だけど、 そんな時間があったら初めからPHPを使ったほうが 仕事が早く終わるってことだろ。 今時Perlでデザインテンプレート使ったりデータベース突っついている ヤツは死ねばいいんだよ(藁
別に手間なんてかからないだろ。 無能はかかるのかもしれないけど、そういう世界は俺にはよくわからない。
慣れてくるとJavaでもPHP並の速度でコード書けるようになってくるんだけどな。 そのぐらいのレベルになると逆にPHPの理不尽な挙動で時間食う事もままある。 368のような人は終始PHPを使った方がいいのは同意。日本のIT業界を底から頑張って支えてくれw
>>366 サーバにftpでアップロードしてるんじゃないの?
そのときシフトJISをEUCか何かに自動変換するよう設定してるんじゃないの?
>>370 慣れてくるとPerlでもPHP並の速度でコード書けるようになってくるんだけどな。
・・・って言ってほしかったよ。嘘でもいいから。ここはPerlスレなんだから。
まぁそんなヤツは絶対にいないと思うけど。
そんな事に慣れるヒマがあったらPHPのコード書くよね。
でもjavaは、Eclipse とか NetBeans 無しじゃ書けないだろ?
Windowsのメモ帳だけじゃ書け無いだろ?
受注先にいつもいつも開発環境が整ってるとは限らんのよ?
自分で書くのではなく、他者にどう書くのか指示する奴ってなんなの?!
>>373 日本語が変すぎて、誰の書いた何に対して思うところがあるのかわからん。
自分ではプログラムを書かないSEがプログラマーにコード規約を押しつけるのは普通
うむ、職業病だな。
377 :
デフォルトの名無しさん :2008/07/27(日) 14:27:00
PHPなんて、HTMLにコードが書かれていて手のうちばればて、そんなものを 一般向けに利用している会社は信用しない っておもうのはあさはか?
>>366 ActivePerlもちゃんと本物のPerlだ。ただ少しばかりActiveStateのパッチが当たってるだけ。
>>377 PHPはブラウザからはソース見れないよ。
javascriptじゃないんだから。
>>377 ASP
JSP
似たのはいっぱいあるよ。
>>377 納品先にってことだったら、Perlも丸見えだし
java だって簡単に逆コンパイルしてソースが復元できるんだから java を神のごとく信奉してる企業こそ浅はか以外の何者でも無い。
なんだよ…「神のごとく信奉」って… ただの道具だろうが
簡単に逆コンパイルしてソースが復元できない言語 って、たとえば何がある?
バイナリだけ納品または配布して ソースは秘匿するってモデルの場合の話ね。
>>386 それでみんなC++使うんだ。
JAVAはほんとにそんなにカンタンに
ソースが見れてしまうの?
perlappでソース隠せ
参考書に 「JPerlでないPerlでは、 文字クラス内の 日本語文字コードは 2文字すなわち文字2個に分解されるので、 同じ日本語文字コードとはマッチしません」 とかいてあるのだが、 これって本当は、 「シフトJISでは」 って意味なのかな? だとしたら、EUCで書けば、 この問題は解決するの?
参考書を読むと $a = (5, 6, 7)[1]; これで、$aにリストの1番目の要素、すなわち6が入ると 書いてあるのですが、こんな書き方、普通するの?
シフトJISで書いたら、問題が発生する確率が60% EUCで書いたら、問題が発生する確率が4% こんな感じ?よってEUCで書くべし、っていう。
>>392 読んだけど、なんだかよくわからんな。
素直にJPerl使ったほうがいいの?
でも、JPerlだと、自分のパソコンでテストするときは
うまく動くけど、それをレンタルサーバーにアップロードしたら
そこで動いているのはJPerlでなくて、普通のPerlだし、
そしたらまたエラーになるの?
「JPerlをインストールする前に、 Perl for win32をインストールしておく 必要があります」 って書いてあるのだが、Perl for win32とはなにか? 自分の使ってるPerlとはなにか違うのか?
(1) なぜかPerlがいっぱいある ●Jperl、Perl for win32、activeperl (2) なぜか文字コードがいっぱいある ●EUC, シフトJIS、 ISO-2022-jp、ユニコード、 (3) なぜかOSがいっぱいある UNIX, Windows、 Mac,、、
参考書読んでたら、 「JAVAとWindowsNTではUnicodeが標準の文字コードとなった」 と書いてあるが、本当なの?
探してみたら、JPerlを使えるレンタルサーバーというのも、 いくつかあるみたいですね。なので ローカルではWindowsでJPerlでテストする 完成したら、レンタルサーバーにアップして、UNIXでJPerlで動作させる というのがいいかな、と思ったんですが、 自分が改造してるCGIはjcode.plを使ってるんですよね。 たしかJPerlってjcode.plが使えないじゃないですか。 とすると、CGIのソースの、jcode.plを使う部分も、 すべて変更しなければならないのでしょうか? やっぱり、use encodingとかってやったほうがいい?
「ここは8進数の国 住民はみな、手の指が8本しかない」
質問 コンテキストっていうのは、 スカラーコンテキストと、 リストコンテキストとの、 二つしかないの?
ヴォイドコンテクストがある。 perlfuncのwantarrayの項を参照。
perlのマニュアルってWEBで見れるの?
>391 一応は。 以下、$numには0~6までの数字が入っているとする。(localtime関数で返ってくるやつね) $string = ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' )[ $num ] ; まあ、他にやり方なんぞたくさんあるだろうが。
無効コンテキストなんていかがでしたか。
voidを無効って訳すのはどうなの?
406 :
デフォルトの名無しさん :2008/07/28(月) 20:57:52
perlメモですきなところって、排他処理の説明のところ。
教えて下しア ファイルで 出席番号 名前 身長・体重・BMI 1,田中昭三,163,65,24 2,鈴木一浪,180,59,13 … 見たいなファイルがあるのですが これを容易にアクセスできるように、ハッシュのように扱いたいのです たとえば data[1] か data[田中昭三] みたいにすると身長・体重・BMIが引き出せるような。 Cだと構造体やら使えばいいのですが、どうにもわからず 助けて下しア
,鈴木一浪wwww
すんまそ、 身長・体重・BMIは空の場合もあるっす
>>407 初心者です。
僕にはこれしか思い浮かびません。
どなたか訂正お願いします。
#!C:/perl/bin/perl
print"Content-type:text/html\n\n";
open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$b,$m,$w) = split(/,/,$_);
$bmw{$num} = qq($b,$m,$w);
}
close(IN);
print $bmw{1};
exit;
>>410 ぉぉぉ
ありがとうございます。ちょっと試してみます。
やりたいことは
出席番号→氏名の取得 と
出席番号→身長 体重 BMI(この三つは可変) を引いてくる処理なのです
出席番号をキーに、これらが引けるのは、構造体ぐらいしか思いつかなくて
>>411 氏名も引けるようにしたものです。
たとえば
$name{1} は出席番号1番の人の氏名
$bmi{2} は出席番号2番の人のBMIです
shusseki_log.cgi に該当ファイルを入れています。
#!C:/perl/bin/perl
print"Content-type:text/html\n\n";
open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$b,$m,$i) = split(/,/,$_);
$bmi{$num} = qq($b,$m,$i);
$name{$num} = $name;
}
close(IN);
print "$name{2},$bmi{1}";
exit;
>>411 >>412 すいません、BMIって肥満度のことだったんですね。
(B=身長 M=体重 I=?? ってことかと思ってました。
ちなみに、BMIとBMWも間違えてました)
書き直しです。
#!C:/perl/bin/perl
print"Content-type:text/html\n\n";
open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$tall,$height,$bmi) = split(/,/,$_);
$name{$num} = $name;
$bmi{$num} = $bmi;
}
close(IN);
print "$name{2},$bmi{1}";
exit;
じゃあ便乗して use Text::CSV::Simple; my $csv_parser = Text::CSV::Simple->new({binary => 1}); $csv_parser->field_map(qw/bango name sintyo taizyu bmi/); my @list = $csv_parser->read_file("list.csv"); #出席番号1の氏名 print $list[0]{name};
なんで出席番号1が [0] なん?出席番号で引けてないじゃん。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。 ↑これ意味がわからん。 ソースコードはUTF8で保存するの? それとも、シフトJISで保存するの?
質問 perlってcase文はデフォルトではないよね。 でも、なんか変なモジュールを使うと使えるんだよね。 で、そのモジュールを使うには、 CPANからそのモジュールをダウンロードしてきて、 解凍して、自分のパソコンとサーバーにアップロードして、 それからでないと使えないんだよね。
ひょっとして、ソースコードをEUCで書くと、 DOS窓で出力するときには、必ず文字化けするの?
テンプレにしたがって、コードを打ってみたんだが、動作がおかしい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; print "あなたの名前を入力してください\n"; $a=<stdin>; chomp $a; print "ようこそ $aさん\n"; ↑これで、実行すると、 あなたの名前を入力してください と表示される。ここはOK。 次に、suzuki、と入力して、エンターキーを押す。 これもできる。でもその次のステップで、 ようこそ、だけ、表示されて、名前が出てこない。 なんでだ? ソースコードはutf-8で保存してます。 入出力はDOS窓です。
そ と、$a の間に、全角スペースが入ってるパターンね。 通常だと、全角スペースの2バイト目が、 メタ文字として認識されてエラーになるっていう。 それを防ぐためにuse encodingなんちゃらという おまじないを入れてみたんだが、それでも動かないって言う。
use strict;
やたー 漏れのはじめてのプログラムだよー 一回ごとに違った結果がでるよー しかもソートされてるよー $a=rand; push (@a,$a); $a=rand; push (@a,$a); $a=rand; push (@a,$a); $a=rand; push (@a,$a); $a=rand; push (@a,$a); $a=rand; push (@a,$a); $a=rand; push (@a,$a); @a=sort {$a <=> $b}@a; @a=join ("\n",@a); print @a,"\n";
>>422 これ、何回かやってみて気づいたんだけど、
生成される乱数の末尾が全部5なんだ。
これって普通なの?
>>423 僕の環境でも、末尾が5になりました。
$a= rand(300000);
のように、最大値を設定しないと、末尾は5になるんでしょうかね。
(それ以上細かい数字は扱えない、という意味で?)
>>422 遅れましたが、初プログラムおめでとうございます。
Perlにはじめて手をつけてから、どれぐらいかかりましたか?
>>426 1年ですか!
それだけの時間をかけたなら、感慨もひとしおでしょう。
今日をPerl記念日として、末代まで祝い倒してください。
僕は「掲示板の改造」から入ったので、
どれが初プログラムか、という境界がありませんでした。
(雑談ですいません)
>>420 んなわけねーだろ。UTF-8で保存してたら全角スペースは 0xE3, 0x80, 0x80 だし、use utf8 が付いてるからこれで1文字と解釈される。
> use utf8;
<略>
> ソースコードはutf-8で保存してます。
Cygwin Perl (v5.10.0) で試してみたが、たしかに文字列の中の変数展開がおかしい。
(改行大杉なので前書き省略。UTF-8で保存)
$a = "ようこそ";
$b = "ニート";
$c = "さん";
print "0. ", "ようこそニートさん\n";
print "1. ", "$aニートさん\n";
print "2. ", "$a$bさん\n";
print "3. ", "$aニート$c\n";
print "4. ", "$a$b$c\n";
print "5. ", "ようこそ$bさん\n";
print "6. ", "ようこそ$b$c\n";
print "7. ", "ようこそニート$c\n";
(結果)
0. ようこそニートさん
1.
2. ようこそ
3. さん
4. ようこそニートさん
5. ようこそ
6. ようこそニートさん
7. ようこそニートさん
ひでー流れだな スルー検定実施中かよ
print "1. ", $a,"ニートさん\n";
いくつかのオブジェクトを持ち回る時、 それらをまとめてハッシュにしたオブジェクトを使うのはありですか? $obj1, $obj2, $obj3があったとき、 my $obj_boss = BossClass->new($obj1, $obj2, $obj3);するような。 perlというよりオブジェクト指向のこねくり方の様な気がしますが、 教えてエロい人!
use utf8 状態では、ソースコード中の UTF-8 な通常の文字が全て識別子として利用できます。
つまり
>>428 の 1 の例では "${aニートさん}\n" とパースされます。
ダブルクォート展開したい場合は "${unko}にーと" などと書き、どこまでが変数名なのか明示する必要があります。
>>415 じゃあ、やっぱり地道に
use Data::Dumper;
open(IN,"list.csv") or die $!;
while(<IN>){
my($num,$name,$height,$weight,$bmi) = split(/,/,$_);
$list{$num} = {name=>$name, height=>$height, weight=>$weight, bmi=>$bmi};
}
close(IN);
print "$list{1}{name}, $list{2}{bmi}\n";
print Data::Dumper->Dump( [ \%list ] , [ '*list' ] );
>>415 入力順ソートしとく必要はあるが
ファイルが表題込みなら出席番号と一致するな
JPerlってシフトJIS専用なの?
>>428 utf-8で保存したつもりが、
ちゃんと保存できてなかったってこと?
$a="あ"; print "い $a\n"; ↑これだと文字化けしちゃうんですよね。 い、の直後、$aの前に、全角スペースが 入っているんですけど、これの解決法が、 (1)JPerlを使う (2)use encodingを使う の2つですか?
use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; $a="あ"; print "い $a\n"; ↑この書き方にして、なおかつ ファイルを保存するときに、utf-8で 保存したら、問題なく、こちらが 意図した通りに表示されました。
こうするとか^^; $a="あ"; $sp="\x81\x40"; print "い$sp$a\n";
別にこれでもよかった。。orz $a="あ"; $sp=" "; print "い$sp$a\n";
ソースコードの文字コードと、 WEBに出力する文字コードと、 この2つは、必ず、同じもので、 一致させてないとだめなの? たとえば、ソースはEUCで書いて、 それをCGIでWEB出力するときの コードも、EUCでそろえるみたいな。 それとも、その2つは、ばらばらでもいいの? たとえば、ソースはutf-8で書いて、 WEBのブラウザへの出力はEUCとか。
いいよ。
でもさ、ブラウザに出力するときに、 「EUCで出せ!」 って命令したとしても、その原文はutf-8で かかれているわけだからさ、おかしくならない? つまり漏れのいいたいのは、utf-8で書いた文が EUCで出力されてしまうのではないか?ってこと。
あ、そう。
構成文字列が全部スペースかどうかのチェックって 正規表現でどうやるの? ここらへんがまだわかんなくて
hogehoge =~ /^\s.$/; かな?
回答者も、書く前に自分で試してみようよ
失敬、失敬。 ピリオドを一回以上マッチだと勘違いしてた。 行頭から行末まで、空白記号一回以上マッチということで、 $hogehoge =~ /^\s+$/; としてみた。 用意したテストパターンに対して "ふぎゃ ほげ" --> 不一致 " " --> 一致 " a " --> 不一致 " \n hogehoge" --> 不一致 " \n " --> 一致 という結果になった。
Infoをパーズするライブラリってありますか? cpanでInfoで検索してもhogehoge::Infoみたいなのばっかでした infoやmanは歴史があるから、絶対誰か作ってるとは思うのですが
>>449 texinfoで探せば一発でそれっぽいの出たよ
Texinfo::Menus
試したことはない。
>>449 歴史がある = PerlでParsingするのは時間がかかり過ぎてナンセンスだったので、
パターンマッチなどでインチキをしていた。
makeinfoはtexinfoをdocbook、html、xmlに変換できるぞな
ソースコードを例えばutf-8で書いたとして、 print "おはようございます"; とかって書いて、それをHTMLに出力するときに、 文字コードをEUCで指定しても、問題ないのですか? 自動でEUCのコードに変換?されて出力されるのですか? 文字化けとかしないのですか?
だから何で自力で確認できる質問するんだよ レス書いてる間にチェックできるだろ・・・そんくらい
455 :
デフォルトの名無しさん :2008/07/29(火) 21:05:18
>>443 プログラムをEUCで書いたとする。その中に直にHTML部分を書いて、
それをプリントしてブラウザーに出力すればそのHTMLページはEUCの文字コードになる。
プログラムをEUCで書いて、その中に直にHTML部分を書いて、出力で
JISやほかの文字コードにしたいときは出力の前に文字コードを希望のものに変換し
ないといけない。プリント分の前にjcode.plなどでjisに変換すればHTMLページは
JISになる。
次にもしHTML部分を外部ひな形ファイルにして、プログラムで読みこみページ
合成してから出力する際は、もちろん、外部のHTMLファイルがどの文字コードで
保存されているかも重要。外部ファイルがJISで保存されていてプログラムはEUCで
ってなっときはもちろんプログラムで文字コード変換なり整合性をとってやらない
と出力時にちゃんぽんの文字コードのHTMLになってしまう。たとえば一部分は
EUCできちっと表示されるけどほかは文字化け、それをJISにするとEUC部分が文字化け
してほかがきれいに表示されるといったことがおきる。
また、文字コード変換で一部文字列で多重変換での文字化けという問題も発生するので
非常にやっかい。俺もこれでどつぼにはまったことが何度もあるw
456 :
デフォルトの名無しさん :2008/07/29(火) 21:08:06
>>453 詳しくは455に書いたけど、もう一度かいておくと、
ソースがUTFでprint "おはようございます"; と書いた場合は、あくまでUTFで出力
されるのでブラウザーでは文字エンコーディングをUTFにしないと文字化けする。
ソースがUTFで出力がEUCにしたければ、
print "おはようございます"; と各前に
おはようございます の部分をEUCに変換しておかないといけない。その変換には
jcode.plが有名。
いまさらjcodeはない
>>445 ですが
>>446-
ありがとうございました。
実は…全角スペースの方が必要でして
全角だと上手くいかなかったのです
もう一度、ご指南お願いします
utf8フラグ立ってたら\sで全角スペースもマッチするだろ。
どいつもこいつもアホばっかり。
>>4 読めよ
461 :
デフォルトの名無しさん :2008/07/29(火) 21:18:49
ええっと、体重等のデータベースの変数をハッシュに切り出す話が上にあるけど、 俺もこの方法はよく使うけど(リファレンスを使ったりもするけど)、いつも疑問に 思っていたことがある。 メモリの問題。 行管理のテキストデータファイルとして、仮にそのデータファイルが何メガバイト くらいまでハッシュに切り出しても大丈夫なのか?ってところ。 仮に1行が100個のデータがあるとしてそれが1万行なら100万個の変数の数に なるよね。 テキストファイル管理のデータベースのSQLよりも遅くなる限界はどれくらいかって話 も気になっている。ここら辺、どういう風に計算すればいいだろうか。
仰る通りです。すみません Shift_JISだけの条件なので 文字コードでやってみます アホですんません
/^( )+$/
\(^0^)/ ---+$
/(^o^)/ ---+$
>>455-456 すごいよくわかりました。
(1)ソースコードの文字コード
(2)HTMLに出力するときの文字コード
(3)外部ファイルとかから読み込むときの文字コード
おおまかに言って、この3種類の文字コードを
常に意識しないとだめだということですね。
ちゃんぽんにするとめちゃくちゃになるので、
なんらかの文字コードに統一しなくてはならないと。
そのためのツールとしてjcode.pl等があると。
で、実際問題として、自分は他人が書いた CGIゲームを改造しているわけですが、そのCGIは、 ソースコードはEUCでかかれていて、 HTMLに出力するときは、EUCが指定されています。 それで、日本の文字化け問題を回避するために、 use encodingで、ソースコードだけはutf-8で書くように するのですが、オリジナルのCGIのソースでは、 HTMLの出力は全部、EUCでブラウザに出すように 指定がされています。その個所は40箇所以上です。 なので、ソースコードをutf-8で書くようにした場合、 EUCで出力するように指定されている現在のソースコードを、 全部utf-8で出力するように、40箇所全部書き換えるか、あるいは jcode.pl等で、utfをEUCに変換してから出力するように ソースを書き換えなければいけないということでしょうか?
それで現在のソースはEUCでかかれているわけですが、 文字化け対策はどうやっているのでしょうか?
CGIの話ならwebprog行けと
>>1 に書いてあるはずだが
>>461 そげなもん、CPUやメモリ搭載量、ハードディスクの転送速度などの諸条件で違ってくるだろ。
あと、Apacheのモジュールとしてメモリに常駐させるのか、CGIとしてリクエスト毎に毎回毎回
ロードするのかで極端に違う。
自分でテストコード書いてターゲットマシン上で走らせろ。それくらいできんでどうする?
1個のデータが仮に100バイトだとしても、100万個だと、たったの100メガバイトだろ。
あんたのCPUの空きメモリがどれくらいあるのか、それ見ればおおよそ見当はつかないか?
普段ID付の板に居るやつはコテハンすらつけないのか。
質問者らしきレスをチョイスしてまで、後から来た人間が教えようとは思わない。
>>467 のレスを読む限り、全部EUCで書けばいいじゃんとしか言えんが
>>467 use utf8 しているのであれば、ほぼ常に出力前に変換しないと、たぶん思ったような表示になりません。
# 例外は us-ascii の範囲を超えない文字のみ扱う場合です。
面倒かもしれませんが、聞く前に一度くらいは試してみましょう。
答える人も、調べたり検証したりしている場合があります。
聞く人が何も試さないうちから正しい答えを欲しがるのは、あまりお行儀がよくありません。
そして
>>469 と重なりますが、CGI の話ならば次からは webprog 板へどうぞ。
>>462 use utf8;
use open ':encoding(shiftjis)';
use open ':std';
しておけば期待した動作になる気がします。アホがんがれ。
しかし、このスレはいい人ばかりだ 職場で、少しでも聞こうものなら ネチネチネチネチ嫌味と文句言われてさ おまいらの方が大好きだ
475 :
デフォルトの名無しさん :2008/07/29(火) 23:09:20
>>470 いや、そりゃサーバーの性能でも違うってのはわかるが、
メモリにデータを常駐させるっていう初心者より一歩深い技は
使うのでもなく、普通にテキストデータからいちいち読みこんで
処理する場合を考えたい。レンサバとかだと事実上スキッド?とか
つかえないとおもうし。
だから、そういう基本的な部分で考えるなら、単にデータ総容量が10Mバイト
くらいなら、ハッシュで100万個データを展開していてもサーバー的には
問題ないかなぁとか、単純に考えてもいいのかなぁって。
ハッシュでデータを全部変数に展開しておければ、相当に自由度が高い
処理ができるわけで。
utf-8で出力するように 40箇所書き換えたほうが楽そうだな だって、utf-8だったら、日本語のパターンマッチの 問題やら、2バイト文字の2バイト目がメタ文字とかぶってしまうとか、 そういう問題が発生しないんでしょ?
内部コードをutf8にして、IOフィルタかませばいいだろうが。 jcodeとかいつの時代の遺産なんだよ。
478 :
デフォルトの名無しさん :2008/07/29(火) 23:16:45
>>466 467
もう一つ重要なことがあって、できれば、文字変換は極力さけたいってこと。
ソースをEUC、データもEUC, HTMLパーツの外部ファイルもEUCとかに
統一しておけば、文字変換は不要だから。(制御部分での文字コードに起因する
バグはまた別だけど)
話は少しそれるが、改造をしているってことなら、いっそHTMLの出力部分を
モジュールにしたらどう?
おそらくUTF8にこだわるのは文字コードバグを考えたくないからなんだろうけど、
個人的にはまだUTFは無視しているのアドバイスはあまりできない。ぐぐれば
UTFでもよい情報のページはあったので(数ヶ月前の時点でさえ)、調べてみると
いいとおもうよ。
>>432 な、何だと!?
use utf8;
binmode STDOUT => ":encoding(cp932)";
$aニートさん = "ようこそ";
print "$aニートさん\n";
---
ようこそ
ををを、知らなかった。こんなJavaみたいなことができるなんて……。
480 :
デフォルトの名無しさん :2008/07/29(火) 23:19:12
JcodeはUTF対応してなかったかも。まぁ、UTFを使う時点でUTF以前の作法とは
ちがってくるよね。
>>477 まだまだjcode.plつかってますが何か?
481 :
デフォルトの名無しさん :2008/07/29(火) 23:21:49
>>479 やっぱりUTF8だと、EUCやSJISでの作法と違ってくるなぁ。便利になってはいるんだろうけど。
個人的にあと数年しないとUTFに移行できないかも。
今jcode.pl勧めてるやつって何なの? 10年くらい脳が止まってるの? 何で素直に組み込みの機能(Encode.pmとかencoding指定とか)使わないの?
483 :
デフォルトの名無しさん :2008/07/29(火) 23:28:04
フラグ付きutf8を頑なに拒否しているヤツがjcode.pl使うんじゃないか?
>>483 お前が使うのは勝手だが人に勧めるようなもんじゃないだろ。
メンテナンスされているものの、思想自体が10年以上前のPerlで 古いのなんのって話題は不毛な争いだと思うんだが・・・ 日本の宇宙開発だって数年前までPC88に支えられてたんだしさw
>>482 この話の流れで jcode.pl って言ってるヤツは、
EUC コードで書かれたCGIゲームを改造しようとしてる
>>273 なんだけども、
コイツが他人に jcode.pl を薦めてるんじゃなくて、
どこかの古~い解説サイトか古~い解説本を読んで
じぶんなりに jcode.pl を使う、という結論を出しちゃったみたいだね。
で、まわりのみんなが必死で utf8 にしろと言ってるが、聞く耳持たないみたい。
そもそも、EUC のままでいいじゃないか?せっかく動いてるんだから。
無理して utf8 に書き換える必要は無いよ。
どうしても EUC じゃ困る。シフトJISで動かしたい、って時だけ
use utf8 すればいいんだよ。
jcode.plの時代って、「テキストを一行以上同時に読み込んだらぶっ殺す」な時代だよな……
Perlのリリースは20年以上前か
490 :
デフォルトの名無しさん :2008/07/30(水) 00:33:26
>>482 今読んでる本
平成10年8月25日 初版 第1刷発行
>>487 このスレにも
「utfにしろよ派」と
「utfなんかに移行できないよ派」
と、2つの派閥があって、困ってるんですよ。
どっちかに統一しろやウンコっていう。
もっと3年くらい経験積んだら自分で
判断できるけど、まだ入門書読んでる段階ですから。
>>487 >そもそも、EUC のままでいいじゃないか?せっかく動いてるんだから。
>無理して utf8 に書き換える必要は無いよ。
という話ですが、全角スペースのあとに
文字列おくと、勝手に@だと判断して
「そんな配列ねーよ」ってエラーを出してきて困ると
いうのと、正規表現でパターンマッチで、
マッチしないはずの文字にマッチしたりとか、
マッチするはずの文字にマッチしたりとか、
困った問題が起こるので、それを回避するための
措置として、例えばJPerlを使うとか、あるいは
utfにするとかを検討している段階なのです。
print " a\n"; 例えばこれ↑ですが、aの前に全角スペースが入ってます。 EUCでこれを保存して実行すると、文字化けになります。 これを回避するのに、いまのところ、JPerlを使うか、あるいは utf-8にするか、しか、回避方法がないのです。
>>494 それ、まだやってるの?もうとっくに解決したんじゃなかったのか?
ちゃんとレス全部読んだのか?? 俺は読んでないけど。
よくわからないんなら何も考えずにutf8で書いてuse utf8しておけばいい
>>494 これだけたくさん、大勢の人がキミのためにレスつけてくれてるのに
読んでないだろ?
いいか、話をまとめるとだな、
全角の空白は
2020 (JISコード)
A1A1 (EUCコード)
8140 (Shift-JIS コード) ←問題あり
このうち、Shift-JIS の後半の 40 が ASCIIコードの @ とかぶる。
print " a\n"; は、
print "\x81@a\n"; と書くのと同じ。
@a が配列と解釈されてしまう。それでエラーが出てるんだ。
(perl のコードの最初に use warnings; 付けてるか?)
で、これを解決するには
・perl のコードを Shift-JIS で書かない。これ常識。EUC 使え。
・utf8 で書いて
>>4 を参考に改造しろ。
これのどっちかだ。
>>498 しかしEUCで実行すると
。。a
になってしまうんですよ。
これって文字化けですよね。
さっきから文字化け文字化けってなんとかの一つ覚えみたいに一体何なんだよ。 全くperl関係ないだろうが。
>>492 最早、歴史的事情以外にUTF-8に移行しない理由なんか無い。
>>493 JPerlなんか使うな。
>>494 それは「EUCだから文字化けしてる」のではなくて、単に端末の文字コードと合ってないだけだ。
端末とプロセスの文字コードが一致してきゃ化けて当たり前。
とにかく、全部UTF-8で書け。入出力は必要に応じてIOフィルタ等で変換しろ。それ以外の余計なことはするな。
>>499 自己レス
出力をDOSプロンプトでなくて
ブラウザにして、
ブラウザの文字コードをEUCにしたら
文字化けしないでちゃんと表示されました。
なんか、この話題ループしてるな。 EUCの人、" a"は変数展開してるから、変数展開しない形に書き直しなさい。 ローカルコード含んだ文字列を変数展開部で使用するのは、重大なマナー違反だ。 改造以前にバグフィックスの問題だ。
ひょっとして、DOSプロンプトに出力するときって 全部強制的にシフトJISになってるの? だとすると、EUCでコード書いて、それをDOSプロンプトに 出力すると文字化けになるの? だとしたら、EUCで書くときは、出力先を ブラウザにして、ブラウザの文字コードをEUCにするけど。
この馬鹿は日本語理解できないの?それとも回答者からかってるの?
ここ1週間、絶句するような質問ばっかだ・・・
微妙な釣りと煽りが多いな コード・データ・説明が揃ってるのにもかかわらず さらに質問してくる意味が判らん
次の質問 $w = 'おはようございます'; $w =~ tr/あ-お/か-こ/; print $w,"\n"; ↑これをやったら、 Invalid range "?αソソセォ-?αソソセ、" in transliteration operator at f.pl line 2. といわれました。 自分の予想では、おがこに、いがきに、変換される はずだったのですが。 コードはEUCで書きました。
>>509 言いたいことは山ほどあるが
せめてコテハンをつけてくれ
話の流れすらわからん
>>508 目の見えない人に、象の説明をするのと同じです。
use strict; my $a; $a=<stdin>; print $a; ↑これを、出力先をブラウザにしたら、 $a=<stdin>; この行の処理の、キーボードからの入力を受け付ける、 この部分が実行できません。 出力先をDOSプロンプトにしたら、できますが、 文字コードがシフトJISになります。 それだと文字化けするので、文字コードをEUCにしたいわけですが、 EUCにするためにはブラウザに出力する必要があります。 どうしたらいいですか? 文字化けを防ぐ なおかつ キーボードからの入力も受け付ける
516 :
デフォルトの名無しさん :2008/07/30(水) 12:24:39
この人は、この人に勝てる みたいな対応表をハッシュとかで格納したいのですが、どういうやりかたありますか? 1番 ○○ 2,3.4 2番 ▲▲ 3,4 3番 □□ 4 4番 田中 (無し。全員に負ける) みたいなのです
>>517 %表 = {
1番 => { 2番 => true, 3番=> true, 4番=>true },
2番 => { 1番 => false, 3番=> true, 4番=>true },
3番 => { 2番 => false, 1番=> false, 4番=>true },
4番 => { 2番 => false, 3番=> false, 1番=>false },
};
man perldsc に記載されている "HASHES OF HASHES"を参考にしてみてはいかが?
>>520 ありがとうございます。見てみます
番号と名前も対応させたいのですが、何も重い浮かばず
>>521 > 番号と名前も対応させたいのですが、何も重い浮かばず
っ[ハッシュ]
番号から名前を引きたいのか、 %番号表 = { 番号1 => "名前1", 番号2 => "名前2",,, }; 名前から番号を引きたいのか、%名簿 = { 名前1=> "番号1", 名前2 => "番号2",,, }; はたまた、{ name=>"名前", id=>"番号" } みたいな感じにするのか。 やりたいことに合わせていろいろ試してみろよ
524 :
デフォルトの名無しさん :2008/07/30(水) 18:06:22
ハッシュとリファレンスって、初心者の頃はまったく理解できなかった。 ハッシュは知らず知らずつかっていたんだけど、リファレンスは。 理解できるようになったのは、メモリのアドレス(のようなもの)で Cでいうとポインタに相当する という説明を読んだときだった。
>>524 Javaはポインター無いよ。
だから、たぶんPerlも、ポインター無しでも
コード組めるはずだよ
ポインタに相当するなら、文字列の先頭から10バイト目を指してみやがれ!
??? ??? ? ???? ??? ??? ?, ?? ???? ? ????? ???!!
533 :
デフォルトの名無しさん :2008/07/30(水) 23:00:34
なにげに523の書き込みって、そんじょそこらのハッシュの説明よりいいんではないか? 数ページから数十ページさくところをさくっと3行におさまっている。
_ ∩ 知ってるが! ( ゚∀゚)彡 おまえの態度が! ⊂彡 気に入らない!
>>521-523 こんなんどう?
insert into Person (Id,Name) values ('1', '○○');
insert into Person (Id,Name) values ('2', '▲▲');
insert into Person (Id,Name) values ('3', '□□');
insert into Person (Id,Name) values ('4', '田中');
番号から引きたい時、
select Name from Person where Id='2';
名前から引きたい時、
select Id from Person where Name='田中';
>>533 やり方書いてあるだけじゃないか。
その意味書いたら数ページ分くらい必要だろ。
537 :
デフォルトの名無しさん :2008/07/31(木) 01:51:33
>>536 まぁ、たしかに。だけど、すごくいい例が3行まとまっているよね。
4と5行目にリファレンスをつかったデータの例をのせるといいよね。
で、その合計5行の解説に5ページくらいあればいいんじゃないか。
ごちゃごちゃ書いていても頭がオーバーフローするだけだしなぁ。
>>528 レファレンスなんて使わないでも
まともなプログラムを組めるはずという意味
>>518 すごい。
言われたとおりにやったら、できたよ。
>>527 すごい。
言われたとおりにやったら、できたよ。
CGIの勉強はあとまわしにして、 先に3ヶ月くらい、DOSプロンプトでの やり方だけ学んだ方がいいのかな? CGIは難しいらしくて、ここの住民でも 答えられないことが多いみたいだし。
Perl言語 プログラミングレッスン [入門編] 結城浩 を入手した。 今から読むからな。
ブードゥープログラミングの真髄を見た。
>>540 あーでも、
これと同じことを、もしEUCでやろうとしたら、
実現は不可能ってことなの?
質問 redoって普通使うの?
print "\a"; ↑これで音がでないんだが、なにか間違ってる?
>>541 「CGIの質問はWebProgに行け」ってんでスルーしてるだけだろ…
スキルのある住人は、最近のこのスレのぐだぐだっぷりを見て
ROMに徹してるだろうしな。
すごい。 言われたとおりにやったら、できたよ。
>>548 だめだ
うちの環境では鳴らない。
なんで?
>524 むしろ、「Cのポインタのようなもの」という説明のせいで、全く理解できなかった。 Cにおけるポインタは、初心者の躓きやすい壁とは言われてるけど 自分はそんなことなかったから大丈夫だと思ってたんだが。
552 :
550 :2008/07/31(木) 09:10:21
すみません、スピーカーのスイッチ切ってました
使ってるのはヘッドフォンだよ
use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; my $a=1; until ($a>10){ print "藁\n"; $a=$a+1; } ↑オレ様のプログラムの第二段が完成! 今回はループを使ってみました。
音がでないのは、まじで理由がわからんよ。 DOSプロンプトへの出力だとだめなの?
まとめ OSがWindowsの場合
(1)
ActivePerlをダウンロードする。
バージョンは5.8.
(5.1が最適とかいう意見があっても
トラップなので聞いてはいけない)
(2)
エディタは「Perlをはじめよう」を使う
(3)
文字コードはutf-8で
(4)
ソースコードの頭に
>>4 をコピペする
(5)
入出力はDOSプロンプトを使う
(6)
ソースコードはutf-8で保存する
(7)
CGIの勉強はあとまわしにする
(8)
EUC派とUTF派が派閥争いをしている
my %a = (); $a{$ika}->{hoge} = $hoge; $a{$ika}->{hogehoge} = qq(@hogehoge); みたいな使い方が出来てるんだけど 大丈夫かな…
大丈夫 何もないところをあたかもリファレンスがあるかのようにデリファレンスすると、 そこにリファレンスができて、さらに指している実体までできる。
>>558 つまり
$a{$ika}->{hoge} は宣言もされていないから、存在もしてないけど
無理やり値いれてしまったから、値が入ってるってことですよね
%a( ika => {hoge => $hoge} )
みたいな状況ですか?
頭が整理されていないまま組んでるので
どういう状況になってしまっているのか教えて下しあ
>>555 550で解決したんじゃなかったのか?
DOSプロンプトへの出力でも、ウチではちゃんとビープ音が鳴るぜ。(\a,\x07ともに)
もともとの音量が小さすぎるのか、あるいはサウンドカード(ドライバ)の設定とかで、
ビープ音だけ出ないようになってるとか。
ウチでは逆で、サウンドドライバの設定でwaveとかの音をどんなに無効に設定しても、
ビープ音だけは切ることが出来なかったマシン(マザーボード?)があった。
これ以上はスレ違いになっちまうけど、PCのマニュアルとかドライバソフトの設定とかHelpをみてみたら?
>>559 > つまり
> $a{$ika}->{hoge} は宣言もされていないから、存在もしてないけど
> 無理やり値いれてしまったから、値が入ってるってことですよね
ちがう。アクセスされたので自動で存在しはじめたってことだ。
「宣言とか何それ。食べられるの?」とPerlちゃんは言っている。
夏休み臭がする
うん、毎日楽しいお^^
>>557 動作するけど、警告は出るよ。未定義値をリファレンスとみなしてデリファレンスした上、存在しないところに代入してるからね。普通そんな書き方しません。
$a{$ika} = {
hoge => $hoge,
hogehoge => qq(@hogehoge),
};
とか。
%a = (
$ika => {
hoge => $hoge,
hogehoge => qq(@hogehoge),
},
);
とか書きます。
$a{$ika}をいきなりハッシュとして扱いたい場合、
まず最初に
$a{$ika} = {};
と記述して生成しておくと(これは宣言ではありません)次から
$a{$ika}->{hoge} = $hoge;
$a{$ika}->{hogehoge} = qq(@hogehoge);
こうゆうふうに書いたり、
%{ $a{$ika} } = (
hoge => $hoge,
hogehoge => qq(@hogehoge),
);
こゆうふうに書いたりできます。
>アクセスされたので自動で存在しはじめたってことだ
違いますよ。「アクセスできなかった」からしょうがなく警告つきでく生成されただけです。
>>565 警告というのが具体的に何をさすのかわからないのだけれど、
Use of uninitialized value $ika in hash element
なら、未定義値をハッシュの添字にしてることについての警告
なので、$a{$ika} = {} でも$ikaが未定義ならやっぱり出ますよ。
% perl -w -e '$a{$ika} = {}'
Name "main::a" used only once: possible typo at -e line 1.
Name "main::ika" used only once: possible typo at -e line 1.
Use of uninitialized value $ika in hash element at -e line 1.
それに
>>557 のコード断片は$ikaや$hogeや@hogehogeには適当な
値が入ってると思うべきだろ。値が入っていれば警告は出ません。
% perl -w -e '$ika = 10; $a{$ika}->{hoge} = 1'
Name "main::a" used only once: possible typo at -e line 1.
存在しないところへの代入の警告ってあったっけ??
突っ込みを入れようかと思ったが先にやられた…
>>557 余裕。変数群がきちんと定義されていれば普通に使う。
同じ事をスライスで書いたりもする。気にすんな。
@{$a{$ika}}{qw(hoge hogehoge)} = ( $hoge, qq(@hogehoge) ) ;
ただ、視認性に優れた書き方と言うのもあって、その点では
一考の余地はあると考えた方が良い。
>>566 >存在しないところへの代入の警告ってあったっけ??
「存在しない変数とかへの代入」って意味であれば use strict 。
「undefをkeyにしたhashへの値の代入」って意味であれば、私は知らない。
と言うか、これは警告出す意味が無い。
erl -MData::Dumper -Mstrict -Mwarnings -e 'my %a = ( undef => undef ) ; $a{undef} = q{foo} ;print Dumper \%a'
% perl -MData::Dumper -Mstrict -Mwarnings -e 'my %a ; $a{undef} = q{foo} ;print Dumper \%a' (コピペ忘れ。567のワンライナは丁寧に書いただけ)
569 :
565 :2008/07/31(木) 17:20:10
perl -w use strict; my %a; my $ika = "aaa"; my $hoge = "aaa"; my @hogehoge = ( "aaa", "bbb"); $a{$ika}->{hoge} = $hoge; $a{$ika}->{hogehoge} = qq(@hogehoge); 何の警告も出なかった。 正直すまんかった
570 :
567 :2008/07/31(木) 17:23:16
567,568のワンライナ部分の説明はウソ。スレ汚しすまん。 erl -MData::Dumper -Mstrict -Mwarnings -e 'my %a ;my $b ; $a{$b} = q{foo} ;print Dumper \%a' きちんと警告が出る。 推敲する様に>俺
571 :
デフォルトの名無しさん :2008/07/31(木) 17:38:11
なんかすごく怖くなってきた。
むしろこのスレらしくなってきた
しょせんこの世はウソだらけさ。
>>556 の続き
まとめその2
(9)
jcode.pl派と、jcode.pm派と、Encode派が
それぞれ派閥争いをしている。
Perlって、なぜかcase文ないんだよね。 それで、case使いたいときは、わざわざ CPANからモジュールをダウンロードしてきて、 解凍して展開してインストールして、さらに CPAN::CASE とかって奇妙な呪文唱えないと使えないんだよね。 この理解であってる?
テンプレに use warnings; も追加してほしい。 動かん、うまくいかん、って言ってるヤツが少しは減ると思う。
(1) requierとuseってどう違うの? (2) (1)の質問って、この前もしたっけ? (3) requireは、Cのincludeと同じ? 自分で作った別ファイルのソースが ソースの頭の部分に挿入されるの?
さーて今日は、どんなプログラムを書こうかなー 予定では、ワロス草のプログラムを書くつもりです。
580 :
デフォルトの名無しさん :2008/07/31(木) 21:46:49
なにその ワロス草、むちゃくちゃ興味あるんだが。
>>576 Perl5.10なら使えるよ。
あと、use Switch するとか。
>>575 Unicode::Japanese 派も入れといて。
ActivePerlだと、これがベストな気がする。
8月、9月、10月の3ヶ月間は、 CGIは無視して、コンソールレベルの プログラムだけ勉強するつもりです
>>581 5.1なら使えるけど、
5.8なら無理って意味?
5.1以上なら、使えるって意味?
>>584 5.8ならuse Switchで
5.10なら言語仕様でサポート
5.8より下は使えない
587 :
デフォルトの名無しさん :2008/07/31(木) 23:27:36
マックでperlやってる俺は、ブラウザとアパッチとエディタとHTMLソフトと フォトショップでサイト構築しているんだけど、コンソールとかはほとんど つかわね~。ぬるいユーザーっす。 だけどマックソフト開発のXCODEがperlもつかえるので、資産は無駄に ならないとおもってます。
>>587 OSXは”堅牢な”UNIXファミリーの一派だよ
ターミナルを使えると、世界が広がりんぐ
589 :
デフォルトの名無しさん :2008/08/01(金) 00:00:47
>>588 ターミナル(コンソール)は、FTPソフトをつかわずにCGIファイルのパーミッションを
変更することくらいにしか普段つかわないんだけど、なんかきっかけになるような
使い方ってないもんですかね。やっぱりmanとか打ち込んで説明をあさることから
始めるべきか。
あとは自鯖のSSLを設定するときにコンソールでいろいろと呪文(にしかみえねぇ~)
を唱えたくらいかなぁ。
独自のOSを作ろうとして失敗し、仕方なくUNIXファミリーの仲間入りしたんやろ?
>>584 5.1≠5.10
Perlの最新は5.10で、2つ目の数字は「十」だ。
>>589 perlは元々awkやシェルスクリプトのように手軽に使える
コンピュータを自動化させるために開発されたもんだから、AppleScriptのような使い勝手でいいんじゃない?
ファイル名の連番リネームとか、エロ画像の自動回収とか、
いちいち専用ソフトを入れなくても、基本コマンド+Perlでかなり遊べる。
>>590 いや、流行モノ好きのジョブズがアップルに持ち込んだんじゃね。
nextstep辺りの話を読もう。
>>589 大量のファイルに対してちょっとひねった一括処理をやるとき便利。
find と xargs を覚えると世界が変わる。
>>589 Perlスクリプトを、CGIじゃなくて、直接実行することはないの?
595 :
デフォルトの名無しさん :2008/08/01(金) 02:11:39
>>592 そういう使い方ができるんだ。アップルスクリプトでバッチ処理みたいな
ことできるといいなぁって思うことは多いけど、ファイル名の処理とかで
壁にぶつかってあきらめるちゃうんだよね。
エロ画像の自動収集じゃなくエロトレントファイルの地引網ができればって
思うけど。俺にはハードルたかそう。
>>593 チェックしてみるね。そこを第一歩にできるといいかな。
ってチェックしたけど xargsは応用的段階だね(爆)
>>594 perlでつくるのはwebページ生成システムなんで、コンソールを
使うときはそうだエラーコードをみるときにも使うね。わすれてた。
でも、自分の作っているのは必ず出力がHTMLなのでHTMLコード自体
をみても意味がないから、結局、サファリのブラウザでチェックしている。
でみてくれ調整の時だけwindowでもチェック。
>>591 何言ってるの?
最新版は5.8でしょ?
質問 JPerlって、現状、メンテナンスしてる人がいないの?
JPerl厨うぜえwww
夏休みすぎる
>>594 直接というのが何を指すのか分かりませんが、
ここがネットワークプログラミングのスレじゃないのは明白です。
>>596 5.10.0.1003
5.8に見えましたか。そうでしたか。
>>597 よっぽど変な人が現れない限りは。
>
>>594 > 直接というのが何を指すのか分かりませんが、
> ここがネットワークプログラミングのスレじゃないのは明白です。
書かなかったことにしといてください。
俺の頭が夏休みでした
英数文字で構成された文字列内から""で囲まれた部分を検索し、 下記のような16進数表記にした「文字列」に置換したい場合、 どのようにしたらいいでしょうか? 【文字列A】 this is test of "Hello,World!" ↓変換 【文字列A'】 this is test of 0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x77,0x6F,0x72,0x6C,0x64,0x21 ご多忙の中、誠に失礼いたしますが、ご教授お願いします。
sub transform { my ($str) = @_; $str =~ s/"([^"]*)"/join(",",map{sprintf"0x%X",$_}unpack"C*",$1)/eg; $str; } print transform 'this is test of "Hello, World!"'
>>602 迅速かつ的確なご回答をありがとうございます。
参考になりました。
>>602 sprintf"0x%X",$_じゃなくてsprintf"0x%02X",$_の方が親切じゃね
>>602 サブルーチンの呼び出しって、&つけなくていいの?
それとも、これがウワサに聞いた、あの
「無名サブルーチン」ってやつなのかな。
Perlの最新版って5.8だよね?
結局caseは5.8で使えるの?
608 :
デフォルトの名無しさん :2008/08/01(金) 23:43:07
>>602 こういうのすぽぽぽ~んって、で余裕で頭ん中からでてくるの?
それともやっぱり初心者の頃は思いもつかなかったけど、経験を積んだ結果
すぽぽぽ~んってなるの?
>>608 とりあえず、すぽぽぽぽーんって出てきたものをマニュアルで確認しながら組み合わせてやるの。
必ずしもperlの全てを覚えておく必要なんてないよ。
use warnings; use strict; my $a=1; &aaa; sub aaa { if ($a<10){ print $a; $a=$a+1; &aaa; } } オレ様のプログラムの第三段が完成! 今回は再帰を使ってみました。 再帰のアルゴリズム考えるの楽しいね!
use warnings; use strict; $|=1; my $a=1; &aaa; sub aaa { if ($a<10){ print $a; $a=$a+1; sleep (1); &aaa; } } print "\n"; ↑今度は、数字がゆっくり出るようにしてみたよ! でも使用中はCPU使用率が100%になるのが困る どうにかならないかな?
>>606 だから5.10だってば。(釣りなのかな……)
http://www.perl.org/
> Current Release: 5.10.0
http://www.cpan.org/src/README.html
> The first releases in each branch
> Released
> 5.10 December 2007
> 5.8 July 2002
> 5.6 March 2000
> 5.5 July 1998
> 5.4 May 1997
最近perl的イケメンを目指してuse strictを使い始めたのですが、どなたか力をお貸し下さいorz ↓メインスクリプト(main.pl) ------------------------------ #!perl use strict; require("x.ini"); print "X = $x\n"; ------------------------------ ↓設定ファイル(x.ini) ---------------------- our $x = "XXX"; (・・・その他グローバル変数いっぱい) ---------------------- 上のソースは調べてる最中に見つけたソースを一部お借りしていますが、 要は大量のグローバル変数を別ファイルで定義して それを読み込んで使う・・という事をやりたがっています。 が、上記は以下の様なエラーが出てしまい、途方にくれています。 Global symbol "$x" requires explicit package name at main.pl line 4. BEGIN等も試してみたのですが、インポートエラーの様な物が発生してどうにも上手く行きません。。 「use strictを使用しながら大量のグローバル変数を別ファイルに定義し、参照させる」という事を綺麗に行う方法はありますでしょうか?
「Perlベストプラクティス」では&付き呼び出しは御法度とあるけど、 ラッパサブルーチンでも控えた方が作法として良いですか? sub wrapper { my ($foo, $bar, $baz) = @_; # any process... &wrapped; # wrapped($foo, $bar, $baz)と等価 }
>>612 意味がわからん。
5.1と、5.8では、
5.8のほうが数字がでかいのだが。
数学板の連中にきいたほうがいいのかな?
ourって何?
今ようやくわかった。 5.1じゃなくて、5.10なのな。 じゃあ、自分が使ってるActivePerlのバージョンは、いくつ?
今、試してみたら、自分のPerlのバージョンは5.8だった。 てことは、古いバージョンだよね? これって最新版にできるのかな?
今調べてみたら、ActivePerlの5.10はダウンロードできるみたいだ。 これって、いったん5.8をアンインストールしてから 5.10を入れなおす、というふうにしないとまずいの?
質問 5.10をサポートしたPerlの入門本は、何冊出てるの?
>>613 シンボルテーブル上の完全修飾名を与えてやれば呼び出せる。
例: $main::x
624 :
623 :2008/08/02(土) 04:10:16
イケメン目標で use strict ということなら、グローバル変数(main パッケージ直下のパッケージ変数)の使用は避けましょう。 ユーザ定義のグローバル変数は、その利便性にもかかわらず、コードの可読性を奪い、またデバッグを困難にします。 できるだけ避けましょう、というのが現在の同意事項です。
今日の発見 open (AAA, '>pyscxtaf.txt') or die "$!"; ↑このコードを実行すると、pyscxtaf.txtという名前のファイルを 作成できる!
>>615 作法としてどうかなんて知ったこっちゃありませんが、
目的のために必要なら使えばいいでしょう。
作法を守って達成を諦めるぶんには好きにやってください。
>>625 どこかよそのチラシの裏じゃダメなの……?(泣
俺も夏休み欲しい。土曜すらやすめんのに
質問 スペースキーを押したら次の画面が出るように したいんだけど、 <stdin>; print "a\n"; ↑これだと、スペースを押して、エンターで確定しないと ならないんだよね。 スペースだけで、できないかな?
質問 redoとかlastとかnextとか、 ループの制御構造を、強制的に なんかする関数って、 スパゲッティになりやすいから、絶対に 使うな、って昔BASICの教科書で読んだんだけど、 それであってる?
>>627 チンポを突き出すとしゃぶってくれるおまえのような奴がいるうちは
いなくならんよ。
use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; $|=1; my $a=1; my $b; until ($a>10){ $b=int(rand(10)) +1; print "藁" x $b; print "\n"; sleep (1); $a=$a+1; } ↑ランダムな感じで藁を出力するプログラムできたよー
ActivePerlって、最初からいろんなモジュールが大抵入っていて、 わざわざCPANからダウンロードしてこなくてもいいように なってるって聞いたのですが、そうなんですか?
今日参考書読んでたら、ユニコードは、 「が」を表現するのに、 「か」+「”」で、3バイト+3バイトで、 最大、1文字6バイト、って書いてあって、 これってまじですか?
「脳を鍛える大人の数当てゲーム」、できたよー use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; $|=1; #---------------------------------- my $a; $a=int(rand(10)) +1; my $b; print "\n"; print "脳を鍛える大人の数当てゲームです。\n"; print "1から10までの数字をランダムで生成しますので、\n"; print "キーボードから、自分の予想した数字をあてずっぽうで\n"; print "入力してエンターを押してください。"; print "それでは、スタート!\n\n"; while(1){ $b=<stdin>; chomp $b; if ($a==$b){ print "正解です\!\n"; last; } else { print "ちがいますよ\n"; } }
質問 forとforeachが同じもの、って書いてあるんだけど、 そうなの?
どこに書いてある?
>>616 バージョン表記の”.”は小数点じゃなく区切りだよ。 5-10みたいなもん
そろそろ夏休み質問は全部スルーすべきだと思うんですけどいかがでしょうか
スレを見ないという選択肢もあるよ
use strictでハッシュのハッシュをやろうとして hoge{ero}[sukebe} このリファレンスを関数に渡そうとして、使おうとしたら hoge{ero}->{sukebe} = tinko なんかstrict ref だかなんだか出てきてエラーとか言ってくる 助けてくれ
>>618 おまいは
>>519 の説明を何だと……。orz
あと、自分の使ってるPerlのバージョンを調べたかったら、コマンドラインで、
perl -v
と叩け。
646 :
645 :2008/08/02(土) 14:01:09
>>643 実行したコードとエラーメッセージは正しく書きましょう。
回答きててよかた
>>623-624 ありがとうございます
やはり使用してる箇所全てに完全修飾名で書くしかなさそうですか・・・
グローバルを大量に書くのは一般的に余りよろしくないのですが、保守性を考えるとどうしても一元管理になってしまいます・・
一応設定ファイルのグローバル変数は全部定数なので、readonlyにしつつコーディング基準書で命名規則を用意するため
デバッグで困るという事は無さそうです
プログラムでの大域変数は原則禁止で、使用する場合は規則を用意して運用で対応しています
保守性・可読性・拡張性の確保が最上位、use strictで品質向上がその次に上位の課題なのですが、
完全修飾名を書くのが保守性・拡張性の低下になりそうで悩みます・・・
パッケージ用意して名称が永遠に不変な様に運用で固めようかな
652 :
623 :2008/08/02(土) 16:28:15
>>649 それでいいならいいんですけどね。
strict.pm は保守性維持のために厳格さを強制するプラグマです。
従って use strict することにより生じるセマンティクス上のエラーを回避するためにコードの保守性が下がったのでは本末転倒と言えます。
strict は既存の strict でないコードに取り付けることによってコードの質を向上させる用途には大抵は向きません。
strict クリーンなコードを目指すのであれば再設計の上、全てを再実装するのが良いでしょう。
その際には
>>651 のような Config::* なモジュールを活用するのもよいでしょうし、
キーと値のペアを書いたファイルを用意し、必要に応じて各スコープ内のレキシカルハッシュにロードするルーチンを手作りしても大した手間ではないでしょう。
オブジェクトにしてアクセサ経由で値を参照させる手もあります。
より現実的な解として、use warnings または -w スイッチの導入があります。
近年の行儀の良い Perl はおおよそ以下のような出だしで始まります。
#!/usr/bin/perl
use strict;
use warnings;
653 :
649 :2008/08/02(土) 17:19:33
色々と有難うございます
>>652 仰るとおり、既に作成された物に対してuse strictを付けても 余り効果的では無いみたいですね
0から書き直すのが一番なので現在それをやってるんですが、どうも一部処理は再設計が必要な様です
>use strict;
>use warnings;
↑これは全部に入れようとしています
最近は紙を書くだけの方に移行してますが一応本職なので、やはり作成するコードは綺麗にしたいですよね
昔作った3万ステップぐらいのcgiゲームを大きく拡張するので、これを機に書き直しているのですが、
strict クリーンな行儀の良いコードを目指して書き直すのは大変な様です・・
やりたいのはシステム共通の定数を別ファイルで管理したいだけなので
方法はオブジェクトでも何でも良いんですが、ここまで悩むとは・・・
でも手法は統一しないと後で悲惨な事になるので、最初に固めるしかないという。。固めないと動けないからオワタ
>>650 変数一個に全部?
>>651 >[Config::*]
ちょっとまだそれが何を意味するのか理解できていないので、ネットとかで調べてみます
654 :
623 :2008/08/02(土) 17:48:29
>>653 既存のコード内の変数名をいじらずに実現するなら、Exporter を使えば可能です。
定義側で @EXPORT (及び @EXPORT_OK) を設定しておけば、利用側のスクリプトでは定義モジュールを use MyConstants するだけで実現します。
use するので、MyConstants.pm (仮名) はモジュールになっていなければなりません。
もちろんこれは個人的にまったくおすすめしたくない方法です。
利用側の改変を最小に抑えようとすれば、こういった方法もあるということでした。
>>649 >グローバルを大量に書くのは一般的に余りよろしくないのですが、保守性を考えるとどうしても一元管理になってしまいます・・
おいおいどういう保守性だ。
保守性じゃなくて、書く瞬間に何も考えないで済むだけじゃないのか。
片付けられないゴミを散らかしながら歩いているようなものだぞ。
>>653 >変数一個に全部?
650じゃないけど、↓こんな感じとか。ourじゃなくてmyでもいいが。
our $global_config = {
hoge => ...,
geho => ...,
...
};
もっとちゃんとするなら「システム共通の定数」を表す
1つのまとまったオブジェクトにするのがいいかな。
ただ、不慣れなものをあれこれ導入するよりは手の届く手段を選んだ方が無難だけど。
656 :
649 :2008/08/02(土) 19:12:57
>>654 @EXPORTは私も考えたのですが、変数一つ一つを代入式に入れないといけないので
623さんと同様、だめかなぁという結論になりました。
>>655 すみません記述が曖昧でした。グローバルというのはグローバル定数の事です。
グローバル変数の場合はご指摘に同意します。
>650じゃないけど、↓こんな感じとか。ourじゃなくてmyでもいいが。
>our $global_config = { hoge => ..., geho => ..., ... };
ありがとうございます。意味が分かりました。
ハッシュによる擬似的な構造体を現在使用しているので、それも一つの方法として検討していました。
(ゲームの為一部処理は100個近い変数を同時に処理することがあるので、正規化してハッシュ等で纏めて管理しないと辛いです。。)
仰る通りこういう場合は「システム共通の定数」を纏めた何かを作るのが普通と考えているので、
これはパッケージなりハッシュなり構造体なりで纏める予定です。
問題は呼び出し方です・・・今知っている手法を整理すると、ハッシュか構造体に纏めて@EXPORTで送るのが一番綺麗なのかな
ActivePerlをいれなおして、5.10にしたよ。 これってcaseは使えるの?
今日の質問 コンソールレベルで、 www.yahoo.comに、Perlから pingを打つ、ってできるの? CGIレベルでないと、だめ?
今日の質問2 Perlでmidiって使えるの?
質問
http://www.abcde.com/aaa.txt の文字列を、Perlのコンソールレベルで、
そのテキストファイルを取得してきて、
Perlから使う、って、できるの?
あるいは、コンソールレベルではできないけど
CGIレベルならできる?
あるいは、相手側のサーバーがソケットを許可
してないとだめとか?
5.10対応の、初心者向けの本、教えてくれないかなー そうしたら、 elsif elsif elsif elsif elsif elsif とかって見なくても済むと思うんだよねー
今、WindowsでコンソールレベルでPerlの勉強をしてるんだが、 Windowsのメモ帳で、ファイルを保存する時に、文字コードの選択なんだが、 (1)ANSI (2)unicode (3)unicode big endian (4)utf-8 と4つの選択肢があるんだが、これって何を選べばいいの? それとも、特に気にしなくていいの? ANSIってシフトJISのことかな?
本で勉強してるんだが,本立て欲しいな。 本が、パタン、と閉じてしまう。
>>664 悪いこと言わんからサクラエディタでも入れておけ
print (0..999999),"\n"; ↑これを実行するとおもしろいよ。 途中で中止するには、ctrl+c
定番は perl -e 'fork while 1' だろ。
↑子プロセスを大量に作りまくってメモリを圧迫、悪い場合はシステムが不安定になる。
670 :
デフォルトの名無しさん :2008/08/02(土) 23:53:18
perl歴10年目にして、fork爆弾を踏んでしまった 自分がかわいいと思った(w。
よく、デバッグがうまくいかなくてイライラしてる時、 -e"fork while 1" して代わりにPCさんに怒ってもらう
コードを書いてるときに、 join をダブルクリックすると、書き方とかヘルプとかが 出てくるエディタってない?
0001から9999までの、4桁の数字をrandで生成するじゃん。 そんで、おなじ数字があったら、破棄して、サイコロ ふりなおしたいのよ。 そんで、今生成した4桁の数字は数値リテラルじゃん。 これを一桁ずつ区切って、配列に入れたいのよ。 1234 だったら、 (1,2,3,4) みたいに。 そしてから、各桁が一致してるかどうか、 判別したら楽じゃん。 そんで、配列にいれるのは、どうやるの?
おなじ数字ってのは、たとえば 1134 とかは、だめってこと、1と1が同じだから。 全部の桁が違う数字でないとだめなの。 それと、数字の先頭は0は不可だから。
HTMLを解析するライブラリはありませんか? JavaScriptのDOMのように各要素の値を見れればOKです。
plaggerのインスコって滅茶苦茶面倒ですね cpan Plaggerとかやっても20数個のモジュールが不足してて それらが自動的にインストールされないから不足分の表示からそれらを個別にcpan $hogehogeするスクリプトを書いてやっても そのうちのほとんどがインストールに失敗するから(なんかテストフェーズで失敗してる)結局一つ一つをソースを修正(というか強制的にテストを通過させる) しながらmakeする作業をする事に…結局5つインスコできた時点で心が折れました 色んな記事ではcpanで一発でインスコしてますが、本当にcpanで一発インスコなんてできるんでしょうか?
>>679 ありがとうございます。
HTML::Parser試してみます。
>>680 大変だな。
おれの環境では、
# portinstall p5-Plagger
とやって放っておけば全部インストールされるけどな。
portsって凄いんですね
>>649 遅レスだが、
>>613 のメインスクリプト中の、
順番を変えてやればいいんじゃないの?
require("x.ini");
use strict;
あと、「定数」といいながら、「$x」なんて使うのはよくないね。
うっかりいじられるかもしれないから。
use constant X => "XXX";
のようにすれば、本当にいじられない定数になる。
>>684 最新流行は Readonly.pm らしいよ。
また、重箱の隅だけれど、constant でも本当にいじられないわけじゃないです。
同じパッケージでユーザ定義関数とぶつかると、警告表示の上でユーザ定義関数が優先されます。
>>684 参照時エラーを発しているのに定義だけ strict の外に逃がしても何も変わらないと思うです。
>>613 メインlでour宣言してないな。
strictしてるんだから、宣言なしに変数使っちゃだめじゃん。
あと設定ファイルでour宣言してるのにuse strictしてないな。
その中途半端なコーディングスタイルはとてもイケメンとはいえないな。
688 :
623 :2008/08/03(日) 19:09:44
>>656 それが妥当な設計上必要なら何千個でも列挙すればいいと思います。が、
ぼくがそれを避けたいのは export 先パッケージに大量のシンボルが流入すると、それらの管理の徹底が困難になり、そこに起因するつまらないデバッグ作業に貴重な人件費を奪われるリスクが高まるからです。
再設計するなら、以下のような現状を:
プログラム <-> 定義スクリプト
下記のような構造に変更してはどうかという提案をしたい:
設定ファイル
・設定項目とその設定値のペアを記載
設定アクセス用モジュール
・設定ファイルから設定項目と値を読込み
# 設定項目が増減してもモジュールには手を入れなくて良い
・設定項目と値のペアをハッシュに展開
・各設定項目を利用範囲毎に分割展開したり
・ツリー構造にして
・部分単位で利用できるようにするのも一興
・our なハッシュにして EXPORT するもよし
・レキシカル変数にして要求に応じて値を返す関数を実装するもよし
・お好みでオブジェクトにするもよし
プログラム
・import したならその変数を使うもよし
・import せずに完全修飾名を使うもよし
・値を返させてレキシカルハッシュなりに格納して利用するもよし
・気分次第で use Readonly するもよし
>>685 これじゃダメ?
*const = \("XXX");
>>687 最初からずっと、そういう話じゃないです。
>>690 ん?なんか変か?質問者は少なくともそのレベルだと思うんだけど。。。
>>688 そこまで考えるんだったら、JSONかYAMLにしとけばいいんじゃね?
自前で作るのめんどくさいだろ。
693 :
デフォルトの名無しさん :2008/08/03(日) 21:16:24
YYYY-MM-DDTHH:MM という形式のデータがあるのですが、簡単に $year = YYYY; $month = MM; $day = DD; のように代入する方法はありませんか?
>>698 ($year, $month, $day) = ($1, $2, $3) if $date =~ /^(\d\d\d\d)-(\d\d)-(\d\d)/;
>>688 Perlの構文をそのまま設定ファイルに使うのはどうか。
sample.conf:
{ hoge => 'hahaha', geho => 'hohoho', foo => [ 'bar', 'baz' ] }
loader:
sub load_config($)
{ my $fh = shift; eval do { local $/; join '', <$fh> }; }
toplevel:
my $config = do { open(my $fh, 'sample.conf') or die; load_config($fh); };
→ $config に sample.conf 内のPerl構文でのデータ構造が得られる
まあこのままだとフリーダム過ぎるので、制約を決めておいて、
loadした後に制約チェッカにかけたりするといいのかもしれない。エラー処理も必要。
設定ファイルが悪意を持っていないとみなせるなら、そこそこ使い物になる。
そんなまどろっこしいことしなくても、do "file" でいいだろ。
>>693 my ($year, $month, $day) = ($data =~ /^(\d\d\d\d)-(\d\d)-(\d\d)/);
こうしてAppConfigやConfig::*を作った人たちの熱意は無駄になったのであった。
700 :
694 :2008/08/03(日) 22:12:58
701 :
649 :2008/08/03(日) 22:22:00
皆様方 色々と助言有難う御座いました。毎回長文なので減らしていきます。。
『use strictを使いながら、グローバル定数は別ファイルで管理する』という、おそらく頻出の課題ですが、
最後のレスの後に総合的に判断した結果、結局exportは使用せずに完全修飾名を書いて参照する方向で決定しました。
理由は以下の二つです
・複数の機能別変数セットがあるため、完全修飾名を書かないと宣言箇所(=管理している場所)が分かりにくい
(全てINI packageで宣言しており、その中に「%SY」、「%DIR」、「%FILE」などのハッシュの種類があるため、
完全修飾名を書いたほうが『INIファイルで宣言している』事が分かりやすい)
・exportを使うと、変数セットが追加される度にどんどんqw()の中に増えていく為、どうもソース的によろしくない (主に見た目と変更方法が)
デメリットはpackage名の変更・中身の分割がやりにくい点ですが、名称と管轄するデータは恒久的に固定にする、という事で対応しました。
定数の書き方はreadonlyか
>>689 さんのやり方を考えていますが、readonlyはモジュールを置かないといけない様なので思案中です。
(といっても変数は命名規則があるので、定数を変更する様なバグは無さそうです。システム的な強制は必要無いかも。。)
702 :
696 :2008/08/03(日) 22:24:20
>>697 何かあったような気がすると思ったら do "file" だったか。
thx
703 :
649 :2008/08/03(日) 22:26:21
あとuse strict、ハッシュの要素名を間違えててもエラーにしてくれませんね・・・use warningsも警告を出してくれない・・・
配列も要素が増減可能だし、連想配列というぐらいだから仕方ないのかな
でも要素名もチェックしてくれないとuse strictを使う意味が大分薄まる・・・orz
構造体ならチェック可能なのかなぁ・・・
>>687 詳しくは知らないのですが、use strictはプログラム中に一回では無くて
定義のみのファイルを含む「使用ファイル」全てに書かないと駄目なのでしょうか?
requireとかは実行時に展開されるから、各ファイルに書かないと不味いのかな
>>703 > あとuse strict、ハッシュの要素名を間違えててもエラーにしてくれませんね・・・use warningsも警告を出してくれない・・・
そんなあなたに Hash::Util。
lock_hash() でお望みの機能が手に入ります。
use strict についてはスタイル次第ですが、このプラグマはレキシカルスコープですから、定義のみのファイルを require で展開して、という用法では、その定義のみのファイル内のコードに strict の効果が及びません。
今回、定義ファイルをモジュール形式の Perl コードにする予定なら、定義側も strict 下で書くべきだと思います。
今日の発見:map 今日、mapという関数を発見した。 配列Aを読み込んで、なんらかの処理をほどこして、 配列Bにする、という機能らしいのだが、不可解なのは その名称だ。 mapといえば通常地図のことなのだが、それと配列の操作と、 どのように結びつくのかまったくわからない。ラリー・ウオールは 言語学者というが、脳が腐っているのではないか。
写像(map)ですけど
5.10に対応してる入門書、 はやく教えてくださいよ
「CGIのための実践入門Perl」 三島 俊司 (著) 技術評論社 (1998/08) 出版社に問い合わせたら、この本は すでに絶版らしい。
http://www.supee.jp/supi-/ >メモ:
>2008/07/15 に新着バグがありました。
>p.76 から、階乗の英語として「power」を使っていましたが、これはべき乗という意味で、
>階乗は「factorial」というべきというものです。
>お便りをくださった読者の方、ありがとうございました。
なんだよ 英語もできないのかよ
>>705 ネタにマジレスすると、Lispという言語のmapcarという関数からきている。
すげーたくさん本読むんだなぁ。てか言語の本なんてそんなに必要かねぇ
地図車ですか?ますますわかりません
>>714 map → 写像
cha → キャラクター(文字)
>>713 自分はたくさん読んで理解するタイプだから。
たくさん読み込むタイプと、
1冊だけ深読みするタイプと
二種類の人種がある。
こんなゲーム考えてみたよ。 あるナゾのパターンの、マッチ式が生成される(あるいは事前に埋め込まれる」 ユーザーはキーボードから文字列を適当に入力し、 そのマッチ式がなんなのかを推定してあてる。
例 cats → マッチ! CATS → マッチしません It rains cats and dogs. → マッチ! One car, two cars. → マッチ! ra ta ca sa ma da ba → マッチ! ca.s → マッチ! 以上の例を見て、 隠されたマッチ式がなんなのかをあてる ゲーム
post.plを実行する
perlスクリプトを踏んだだけで 2ちゃんに自動的に投稿できるってこと? でもたぶん文面は固定というか きめうちだと思うけど。
WWW::Mechanizeを使ってコマンドラインから 2chスレを検索して投稿できるアプリケーションを作った事が懐かしいな
ページ内に書かれた外部サイト(2ch)にPOSTするフォームを
自動的にsubmit()するJavaScriptが含まれるHTML
を生成するPerlスクリプト。
ちなみにQUERYストリングはJavaScriptからでも取れる筈なので、
>>720 と同等のものを静的なHTMLでも作成出来る
perlを学び終えてからCを学ぶと 理解は容易になるの?
727 :
デフォルトの名無しさん :2008/08/04(月) 12:03:14
perlに限らずどんな言語だろうが経験ありゃ楽になるだろ
いやさ、そんな一般論はしてないんだよね。
また新しいゲームのアイデア考えたよ 必ずPerlの予約語の名前をつけなければならない、ってオンラインゲーム。 whileさんとか、forさんとか。 そんで、そいつらでパーティ組んで、ダンジョンにもぐる。 コードを組む問題が出てきて、パーティー構成が うまく組めてると、問題を解ける。 必要な予約語がいないと、そこで詰むw
予約語の多いperlならではだな あとアルファベットをアイテムとして入手できて,消費することで単語を作れるとか まあほぼ間違いなく面白くないな
簡単に使えるダウンローダモジュールはないでしょうか? URIを与えて、レスポンスヘッダのContent-Dispositionフィールドを 読んで、セーブファイル名を適切にセットしてくるようなものは?
>>732 lwpでresponseのfilename使えばいいと思うが。一緒についてくる
lwp-downloadコマンドが参考になる。
>>725 そのスレで聞いてください。
>>726 あなたが Perl を学び終えたらぜひ知らせてください。その際にはいくつかお聞きしたいことがあります。
>>729 そのスレで求人してください。
>>730 あなたの素晴らしいアイデアは承りました。もしよろしければ、ここはゲームデザインスレではなく、プログラム板内の Perl 質問スレである点ご留意頂き、それを実現するコードのほうを拝見できませんか。
>>734 ご親切にありがとうございます。このスレでも氏を知らない者が2%くらいはいるかもしれませんから、彼らに代わり御礼申し上げます。
736 :
デフォルトの名無しさん :2008/08/05(火) 00:37:45
質問 今、パソコンでローカルで、 Perl5.10で勉強してるんだけど、 勉強がおわたら、レンタルサーバーに アップロードしてCGIとして動かすんだけど、 ひょっとして、サーバーのほうも5.10でないと 意味がないのかな?
>>738 5.10で新しく追加された機能さえ使わなければOK.
Perlでmidiって鳴らせるの? コンソールレベルで。
>>719 lisp 触ったことない人には car や cdr が分からんのですよ。
配列って初期化するの? my @a; みたいに。
最近、ちょっとづつ Perlのことがわかってきてうれしい
returnで、2つの引数を戻すってできないの? かならず一個だけなの?
return ("うんこ", "しっこ", "げろ");
perlでは、複雑なデータ-構造をやろとすると、 レファレンスやデレファレンスを駆使しなくてはならない。 と聞いたのですが、そうなのですか? ちなみに、掲示版は、名前、メールアドレス、投稿日時、投稿内容、レス番と 5つのデータ-がからむため、レファレンスやデレファレンスを駆使して 複雑なデータ-構造を作っているのですか?
>>746 じゃああれだね。新型の電話機の普及の問題と同じ。
ネットワークの外部性?
使ってる人が多くならないと、サーバーの側も
対応してくれないっていう。
>>742 ,745,747
ほかの人のコードも読みましょう。
そうやってほかの人がどうやっているのかしらべてみましょう。
あなたの Perl には Perl のじょうずな人たちが作ったモジュールなどがたくさんふくまれています。
ほかにも Web でくばられている掲示板などのスクリプトもたくさんあります。
よりどりみどりです。
wantarray って使い方がいまいちよくわからんな。
いいこと思いついた。 結城さんのperlの本を英語に翻訳して アメリカで売ったら、売れるんでない?
掲示板スクリプトは素人のスパゲッティーコードが多くてお勧めできない
>>752 ほう・・・
じゃあ、プロのコードを見せてよ。
あなたは、よほどご立派な素晴らしいプロのコードが書けるんですね。
さぁ、さぁ、さぁ、見せてもらおうじゃないですか。ご立派なプロのコードとやらを。
期待してますよ。逃げないでくださいね。
プロは基本的に自分のコード見せないし もし見られたとしても金がかかるだろJK
オレもプロだから立派なコードを書いてるんだが、 プロだからタダじゃぁコードは見せられないな。残念だけど。
759 :
752 :2008/08/05(火) 12:42:31
プロの世界ってデスマーチ頻発してるらしいから、 コードはパスタだらけになってると思ってた。
プロのコーダ ≠ 本当のプログラマ
762 :
デフォルトの名無しさん :2008/08/05(火) 13:56:12
>>749 > ほかにも Web でくばられている掲示板などのスクリプトもたくさんあります。
掲示板は素人が真っ先に手をつけるものなので、参考にするのは危険。
763 :
デフォルトの名無しさん :2008/08/05(火) 14:00:46
>>747 リファレンスを使うか使わないかは、データの処理方法とアルゴリズムとか
もろもろの理由から考えてきめればいいんだよ。この質問をしている時点で
リファレンスをつかったデータ構造の表現とかはまだ敷居がたかいかもしれ
ないと思うけども。
シンプルにできることをわざわざ複雑にリファレンスを使う必要もないし。
たった5つのデータの掲示板ならハッシュで一枚のcgiファイルで
終わりだな。(HTMLひな形はパーツとして読み込む形にしても)
$name{投稿番号}
$date{投稿番号}
$message{投稿番号}
$account{投稿番号}
$resnumber{投稿番号}
のハッシュをつくるかな。で、必要なデータ分だけデータファイルから読み込んで
上記ハッシュにセットして、投稿番号でデータを扱う。
あとは外部のひな形HTMLファイルを読み込んで、投稿データを埋め込んで
HTMLファイルを生成、文字コード変換して、画面出力。
まぁ、基本からはじめていろいろと自分なりのニーズがでてくると思うので
それをプログラムでどう表現するかを考えると自ずと答えはみつかてくる
ので上達すると思うよ。たいていはソートアルゴリズムを自然と研究するように
なっていくと思うんだけど。複雑な掲示板になればなるほど。
764 :
デフォルトの名無しさん :2008/08/05(火) 14:15:29
perlのプログラムに「プロだから・・」というレベルを求めるのはどうかと思う。 素人が書き捨てに使うことこそ本来の役目と思う。 なんというか、カップラーメンを食べる作法をあれこれ言うようなもんだ。
このスレ流れ早くない?
で?プロは尻尾を巻いて逃げたんか? さすがプロだね。逃げ足は速い。
>>765 > perlのプログラムに「プロだから・・」というレベルを求めるのはどうかと思う。
コンピュータ言語に関しては、「プロ」に権威を見出すのは間違いだ。
その方面に詳しい奴ほど、才能がある奴ほど、「プロ」になりたがらねえ。
プロじゃなくてもいいから、参考になる良コードを教えてくれ
逃げるプロは、いらん。
プログラマの略だよね。<プロ
大学の情報系では、「就職できなかったらプログラマになるさ」とか 言われてる話なら聞いた。
>>769 プロが書いたのを教えてあげる
つ KENT
777 :
デフォルトの名無しさん :2008/08/05(火) 19:06:00
まずプロのプログラマーである時点で当てにならない 理系エンジニアが研究の道具にプログラミングを使うっていうのが正しいプログラミングのプロ
>>763 ああなんだ、そうすればいいんだ。
5種類のデータ-があるからといって、
必ずしも5次元配列にしなければならない、
ってことではないんだね。
主にコードを書いてご飯食べてるのがプロ。 食べてないのがアマ。 それだけの話。 「玄人」なんて自称しているやつはほぼ全員後者。
なぜか暗記パンを思い出した。
ちょっっ するとハッカーの半分ぐらいは出家するwww
コードで飯を食うのがプロ。 コードを食うのがハカー。
住所録ファイルの更新スクリプトを作ろうと考えています。 更新用の情報「番号,氏名,生年月日」が記入されたcsvファイル1のレコードから「番号」を用い、 同じように「番号,氏名,生年月日」が記入された更新前のcsvファイル2から、「番号」の列全てに検索をかけて、マッチした場合はcsvファイル1の情報をファイル2に上書きさせたいです。 具体的にはこのような感じにしたいです。 csvファイル1(更新用情報) 2,山田太郎,1月1日 csvファイル2(更新前) 1,近藤太郎,3月3日 2,兼松太郎,1月1日 3,近藤直正,3月12日 csvファイル2(更新後) 1,近藤太郎,3月3日 2,山田太郎,1月1日 3,近藤直正,3月12日 自分なりに下記のように作成してみたのですが、上手くできずに詰まってしまっています。どなたか解決法をご教授ください… open(IN, '<After') or die "file open error: $!"; open(OUT, '<Before') or die "file open error: $!"; while( <IN> ){ @a = split(/,/, $_); @b = split(/,/, <OUT>); for($i =0; $i<13; $i++){ if ( $a[0] ne $b[$i] ){ print OUT "$a[$i]\t" } } print "\n"; }
>>783 最近の Perl は読込専用で開いたファイルに print() できるようになりましたかそうですか。
786 :
752 :2008/08/05(火) 23:31:57
せっかく読むなら上質なものを選んだほうがいいってだけなのに、 なんでそんなに反応するんだ?
787 :
735 :2008/08/05(火) 23:34:12
>>737 Perl を学び終えた人に聞きたいことなので、早く学び終えてください。
C の読み書きすらままならない人が Perl を学び終えるなどと口走るのは愉快な冗談にもほどがあるので。
がんばってくださいね。
>>783 どうぞ
use strict;
use warnings;
my %data;
for my $file ("更新前.csv", "更新用情報.csv") {
open my $fh, "<", $file or die $!;
while (my $line = readline $fh) {
chomp $line;
my ($id, @data) = split /,/, $line;
$data{$id} = \@data;
}
close $fh;
}
{
local $\ = "\n"; local $, = ",";
open my $fh, ">", "更新後.csv" or die $!;
while (my ($id, $data) = each(%data)) {
print $fh $id, @$data;
}
close $fh;
}
789 :
デフォルトの名無しさん :2008/08/05(火) 23:50:10
>>778 763のハッシュで書いたものは結果的に5種類のハッシュを使っているので5次元だよ。
そのハッシュどうしの並びは固定していないので自由につかえるわけよ。
5x投稿数の行列としてもつかえるよね。
それはさておき、無名ハッシュという考え方が身に付けば、データについて非常に
柔軟に考えることができるようになるよ。適当にハッシュつかって変数にしとくか
って感じでw ある意味、perlの強みをいかんなく発揮すると思う。
>>789 Perl の魅力の一端についての、とてもよい説明だと思います。
が、
>>747 に挙げられた5項目並列の情報群を「複雑なデータ-構造」と見做して「レファレンスやデレファレンスを駆使しなくてはならない」との受け売りで自縄自縛してしまうあたりの応用力の人にとって、その説明は役に立つのかしら。
流れと関係無いんだけど、変数のデータ型とかはきっちり固めたいとか思うのは異常なのかな perlの特性(魅力?)を無視してるけど、線引きはちゃんとした方がバグも減ると思うんだ ispのサーバーでcgi動かすにはperlぐらいしかないから、上手く使いこなしたいぜ
792 :
デフォルトの名無しさん :2008/08/06(水) 00:34:39
>>791 個人的にプログラムはperlからはいってしまった(大学では単位取るくらいには
やったけど)ので、型とか意識する場合は、バイナリデータか通常データwか
くらいなんだよなぁ。しかもstrictなんてつかっていないので、変数も好きなとき
に好きなときだけ用意してしまう。そのかわり変数はしっかりと把握している癖
はついたのかもしれないけど。
最初に変数などを定義してバキバキにやることで逆に緊張感がうすれてバギーな
コーディングになってしまうっていうようなことはないのかな?(そんなことは
ないか)
>>791 変数に型縛りがないことで、mapなどの汎用関数が簡単に書けるんだよ。
sub my_map
{
my ($func, @list) = @_;
my @mapped = ();
foreach my $x (@list) {
push(@mapped, $func->($x));
}
return @mapped;
}
変数に型縛りがあると、このような処理を書くのが面倒くさい。
うまく関数やオブジェクトにまとめることで、変数の氾濫は避けられると思うよ。
794 :
デフォルトの名無しさん :2008/08/06(水) 01:35:18
COBOL流型縛りは、昔のアホなメインフレーム屋が設計書を書く上でドキュメント分量を水増しして「仕事したふり」をする為のアリバイ作りが目的。金は発生するが、幸せは発生しない。 C流型縛りは、実は「型」ではなくてレジスタ/メモリのサイズ/符号付けでしかない。 perlを「型無し言語」と言う奴は「構造クラス」を理解できてないアホ。こういうアホに限って複合データ構造/動的データ構造を理解できないどころか、その存在すら知らない。 昨今Javaがもてはやされてるのは、昔のメインフレーム屋の亡霊が新たな「仕事したふり」アリバイをめっけたから。
>>789 掲示板に5次元配列w そのハッシュはあくまで添え字に過ぎず、それは2次元。
5次元て とんでもない箱だぞ? 4次元でもややこし過ぎて 助けてドラえもん 状態だ。
>>794 Perlって変数を様々な方法でいじって見ると面白いよね。
Perlやる前はCとVBだったから一番最初に感動した部分だった。
>>795 いま君が使っているディスプレイの点は5次元で表現できるよ。
幅×高さ×赤×緑×青
ドゥユーアンダスタンンンドゥ
>>797 自称プロの方ですか?w それ3項目の2次元の典型。
それを5次元というなら、特定座標の赤の全階調毎に緑×青の
組み合わせパターンを保持するって、どういう目的だ?
じゃ「2008/08/06 12:50 」も 年月日時分の5次元?
>>798 誤用を、単なる例えで逃げられましても。
百歩譲って、「幅×高さ×赤×緑×青」として その位置には
いったい何が保管されているんだい? ディスプレイだよね?
802 :
デフォルトの名無しさん :2008/08/06(水) 02:41:00
>>794 こういう妄想90%の「説明ぶり」を見るとゾッとする。新語創造癖も併発してるし。
803 :
デフォルトの名無しさん :2008/08/06(水) 02:48:05
>>797 > いま君が使っているディスプレイの点は5次元で表現できるよ。
> 幅×高さ×赤×緑×青
> ドゥユーアンダスタンンンドゥ
何というキチイガ!!
>>797 ドゥユーアンダスタンンンドゥ と言ってる本人が一番理解できてませんw
4次元の世界とは、たて×よこ×高さ×ななめ ・・・って言ったのは、どこのどいつだったか つつい忘れてしまった。
807 :
デフォルトの名無しさん :2008/08/06(水) 04:06:41
perl -le 'print $_ for @INC' とか実行すると、モジュールを探しに行く先(?)が表示されますが、 これはどこで定義されているものなのでしょうか? また、スクリプト中で指定せずともここにパスを追加する事は出来るのでしょうか?
perl --help
>>808 -Iの事ですか?であれば確認してあります。
もっと細かく言うと、-Ipath/to/modules みたいな事をしなくても、
上記であげたワンライナーで既に定義済のものと同じ扱いで定義する事が出来るのかを知りたいです。
興味本位で質問していますので、通常こういったケースではこうするというようなアドバイスは不要です。
よろしくお願いします。
810 :
デフォルトの名無しさん :2008/08/06(水) 06:49:42
>>795 そりゃ、
投稿番号、投稿データ
というくくりでみれば、2次元だけど、それは5次元のなかの上記部分で抜き出した
所をみているだけにすぎない!
っていったらだめかな?(投稿番号まで自由にさせれば6次元だぜ)
そもそも投稿データというのは掲示板のみてくれによって、データ同士でくくりがあって
ひとまとめに表示しなくてはいけない場合もあるし(レス番号とか、アカウント別とかね)
、だから単純に2次元という視点じゃ、結局(無名)ハッシュとしての利点をみることが
できず、足んない@配列的な思考しかできなくなると思うよ。実際、俺自身が初心者から
数年、抜けきれなくてくろうしたもん。
811 :
デフォルトの名無しさん :2008/08/06(水) 06:55:35
続き、無名ハッシュとリファレンスの実用的な使い方を理解したときに、 @配列的思考の呪縛から解き放たれた感じがしたんだよね。 だいたい、データをどう頭の中でとらえておくか?っていうのはまさに 無名にしておいて浮遊間をあたえておかないと、損だよね。そこから、 ときには2つを抜き出し2次元にして(ソートして)ほかのデータを それにそってそろえたり、一部のデータをキーにしてほか関係あるデー タを抜き出してならべたり、そういう思考ができるの無名ハッシュで 多次元でっていう思考が必要かと思う。(多次元っていうと問題なら、 浮遊間でもいいけど、次元固定しちゃいけないって意味で。)
>>798 定義として「n個の変数でn次元を表す」というのと、
具体的にそのすべての「点」の値を(プログラム内で)保持する、とかいうのは
また別の話だろ。
813 :
デフォルトの名無しさん :2008/08/06(水) 09:12:32
pythonやrubyとかだと検索すると、リストで返って来るから分かり やすいんだけど、perlの場合の挙動が良く理解できてない。htmlから <td>の要素を全て検索して、表示するってコードはこんな感じが スタンダードですか? 23 foreach($content=~/<TD>(.+?)<\/TD>/g){ 24 print; 25 print "\n"; 26 }
>>807 ,
>>809 イマイチなにがしたいのかよくわからないけど、@INCはどこで定義されてるか?
ってことについては、コンパイル時にCoreに組み込まれる。
正確に言うと、configureオプションの-Dprivlib,-Dsitelib,-Dvendorlib,とか-Dinc_version_listらへんかな。
これを後から動的に追加とかしたかったら、-Iオプション使うか、
スクリプトの中で
use lib '/path/to/...'するか、はたまた
our @INC;
push(@INC,'/path/to/...') (かunshift)とかするしかないんじゃないか。
ほかのやり方があるかも知れないけど、オレは知らない。あったら誰か教えて。
なんという夏休み
掲示板データが6次元とかwテラ異次元w もういやだ 早く夏休み終わってくれw
夏休みになると、知能遅滞者が野に放たれるのか……
>>809 添付マニュアルのperlrunに書いてあるってことまで特別サービスでa教えてやるから、
あとは自分で読みなさい。
>>810 > そりゃ、
> 投稿番号、投稿データ
> というくくりでみれば、2次元だけど、それは5次元のなかの上記部分で抜き出した
> 所をみているだけにすぎない!
> っていったらだめかな?(投稿番号まで自由にさせれば6次元だぜ)
完全にデタラメ。
多次元データの掲示板とかどんだけカオスなんだよ
とりあえず、多次元というのが良い釣り餌になるのは理解した。
>>820 おまえん家のモニタも5次元データで動いてるらしいぞw
823 :
デフォルトの名無しさん :2008/08/06(水) 13:15:58
::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ、::::::::::::::::::/ :::::::::::::::::::::::::::::___;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ、:::::::/ ::::::::::::::::::::::::::::::::::::::::::::::::`ー--、_;;;;;;;;;;;;;;;;;;`ヽ′ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`ー--、__/ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`ヽ、 :::::::::::`ー―――----、____::::::::::::::::::::::::::`ー-、 :::::::::::{ |:::::::| `ヽ、__,.-‐〈 ̄ ̄ ̄ ̄`ー`ヽ、 :::::::::::ヽ |:::::::| ヽ、___,.-‐一'´ :::::::::::`′j:::::::| -__ゝ ヽ、_ノ!:::::::l ´ヽ、 / l:::::::l、 ヽ-、__ゝ ヽ:::::::ヽ `ー--!、 ―--、 ヽ:::::::ヽ、 ー-< ,ィノ|_, ::::::::::::::::::::::`ヽL:::::::::::`ヽ、 ,ィノ`ー'´:::::::ノ′ ______ヽ、:::::::::::`ヽ-イ′:::::::::::::::/ :::::::::::::::::::::::::::::::::`ー――---、___/ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ̄ ̄`ー――--、 呼ばれたような……
お帰り下さいませ!ご主人様!
cでできてperlにできないことなんてないお
でもネットハックは作れないって鼻で笑われたお
829 :
デフォルトの名無しさん :2008/08/06(水) 15:26:57
>>819 完全にデタラメってどこがでたらめなんだよ? 自分にはデータ配列をつかっていかように
にも組み合わせて、高次元のものとしても やろうと思えば、できるっという意味に
とれらんだけど、そうじゃないのか? それとも単に掲示板で多次元配列はナンセンスって
ことがいいたいだけなのか?
というか、ここの連中って人の批判するなら、自分なりの根拠を書いてほしいね。
ただ嫌みを書き捨てるやつは最低だよ。
いろいろと参考意見を書いてもらう方が初心者にとって遥かに参考になる。
ここをどこだと思っている
>>829 くだらない言い争いはどっか別の場所でやってくれ
832 :
デフォルトの名無しさん :2008/08/06(水) 15:57:32
>>819 デタラメって、どこがどうデタラメなのか指摘もできないなら、捨て台詞なんて
書き込むないでほしいなぁ。こっちは誠意をもって書き込んでいるんだから、
間違いがあるなら指摘するのが筋ってものだと思うが。
自分の文句がある部分でさえ説明できないなら、書き込まないでね。
もう自演はおなかいっぱいです
834 :
デフォルトの名無しさん :2008/08/06(水) 16:00:37
>>833 文句あるなら、間違いを指摘しろってんだを、ぼけ、死ねや
835 :
デフォルトの名無しさん :2008/08/06(水) 16:04:54
とりあえず、多次元についての説明求む! なにがデタラメなのか知りたい から。できる人にとっても説明が難しいのかな。
>>829 > 完全にデタラメってどこがでたらめなんだよ?
「このF1レースカーは」と言いながら自転車を指さしている行為に例えられるデタラメだな。
837 :
デフォルトの名無しさん :2008/08/06(水) 16:39:49
イェイ発見
>>747 の、名前、メールアドレス、投稿日時、投稿内容、レス番という
5つの要素で構成されたデータを5次元とすると、
各次元が次元の構成要素として成り立つのかどうか。
わかりやすく要素を名前、投稿日時、投稿内容の3つに絞ろう
これを一般的な3次元の座標に置き換えてみる
名前は、まぁ1つの次元と捕らえて良いだろう
投稿日時はどうか?利用者による投稿時間分布を考えれば、これもアリだ
さて、投稿内容はどうだろうか?
投稿内容をキーにして、利用者や投稿時間が多次元的に存在するかどうか。
データの正規化ってこういうことだよな?
5つの要素を5次元として考えたらひどいDBになるんじゃないか?
こわいよママー
根本的に多次元配列を勘違いしてる奴が多くないか? 配列の項目要素を多次元化して何か1つを指し示すのが多次元配列だろ? もっと簡単な例で考えてみな 渋谷区->渋谷->1丁目->3番地->2号 ならすでに5次元配列だ 2次の要素が南青山になったりすると3次の丁目以降も変わる 4次の3番地が変わる事もある で、最終的に号まで指定すると何かを指し示す事になる(住所そのものが目的にもなるけど) 掲示板はどうだ? 名前->メールアドレス->投稿日時->投稿内容->レス番 として管理する必要があるか? これらは並列に並んでこそ1つのデータなわけだ 名前->メールアドレス->投稿日時 までが同じでその先が枝分かれするような事は偶然かSPAM的要因以外には無いだろ そして、少なくとも投稿内容が配列の要素になる事だけはあり得ないな
たすけてママー
手軽にデータ構造 my %data = ( 1 => { name=>"たろー", mail=>"sage\@sage.sage", date=>"2001/01/01" }, 2 => { name=>"じろー", mail=>"sage\@sage.sage", date=>"2001/01/01" }, 3 => { name=>"生きてた", mail=>"sage\@sage.sage", date=>"2001/01/01" }, 4 => { name=>"うれぴー", mail=>"sage\@sage.sage", date=>"2001/01/01" }, ); print $data{1}{name}; print $data{1}{mail}; print $data{1}{date};
ちょww南極自重wwww
>>829 次元を自由度という意味で使っているように見えるけど、この文脈だと誤解を与える。
BASIC時代だと、リファレンスのような概念が無かったので、何でもかんでも二次元配列にしてたような気はする。 my $NAME = 0; my $MAIL = 1; my $DATE = 2; my @data = ( ["るどるふ", 'sage@sage.sage', '2001/01/01'], ["いっぱいあってな", 'sage@sage.sage', '2001/01/01'], ["ひゃくまんかい", 'sage@sage.sage', '2001/01/01'], ["いきたねこ", 'sage@sage.sage', '2001/01/01'], ); print $data[0][$NAME];
ああ、なんだ、どうにもこうにも意味不明だと思ったら、「5次元のデータ」と「5次元配列」をごっちゃにしたやつがいたのか……。 [a, b, c, d, e] ← 5次元空間の中の1点を指す5次元のデータ。 [a][b][c][d][e] ← 5次元空間のある範囲を埋める5次元配列。
>>844 > 次元を自由度という意味で使っているように見えるけど、この文脈だと誤解を与える。
「自由度」が未定義なので意味不明。
なにこの夏休みムード…うらやましいな んで、この板IDないから誰がなに言ってるのかさっぱりわからんので コテかトリップつけてくれorz そもそも掲示板のデータてわざわざ全データを変数に取り込む必要なくね? while(<$ファイルハンドル>){ my @データ = split /$区切り文字/,$_,$項目数; #場合によってはハッシュに変換 出力処理(\@データ); } それともMLDBMでも使ってるのか??? 仮に取り込む必要があっても 掲示板のレス番ならIDはほぼ隙間無く並べられてるはずなので $data[$idx] = {...};か $data[$idx] = [...];だろ 普通の配列にハッシュのリファレンスが入ってる 普通の配列に配列のリファレンスが入ってる ってだけで次元とかまったく関係ない話だろ。
5次元とかお前ら学者か何かか? ここは何かしらの目的があってそれを達成する方法を聞く所だろ 問題があってそれの解決方法でもいいけど 配列で5次元がどうだとか、perl関係ないんだからよそでやれよアホ
>>791 少しも異常ということはなく普通だと思います。Perl land において少数派ではあるというだけで。
そしてそんなあなたのために、 CPAN が Variable::Strongly::Typed を用意して待っています。裸エプで。
ζ ______,―――- ζ /\__  ̄ \ ζζ / ~| ζ | _____ ヽ | ̄ ̄――-~  ̄ヽ ζ / ヽ ζζ /^ソヽ __/ ̄ ̄ヽ――~^^\ ζ /  ̄ ̄ \ ζ \ /ζ _ / ζζ ~^^\,,_____,,__,/ ヾ/ヽ―ヽ___/ ζ / | ヾ /^ ヽ \ ζζ ヽ / / | |λ| | / ̄ ̄ ̄ ̄ ̄ ̄ ζ ヽ ヽヽ / | |/ //< 夏だな、ルパン ζ | / ゞ |__/ \______ ζζ ヽ ーヘ―― | | / / ζ | // ̄^~ ,/^ /―ヽ / ζζヾ / /ヽ/ /_ _―― < /|ゝ/ ヾヽw~ヾ/ ̄ ̄_ ̄ ̄ ̄ ̄\ /// | |/ ̄ ̄ ̄ ̄\ | / , _从〃 / // // ヽ \ ヾヾ_ // ,/// | \ ヾ_// /~/ / ノ | | 彡 彡,,/w/ / __/ | | / /_ノ |
>>813 foreach my $textbody ( $content =~ m{<td(?:\s[^>]*?)?>(.+?)</td>}gis ) {
print $textbody, "\n";
}
# foreach の条件部はリストコンテキスト。
# m//g はリストコンテキストではマッチ内容リストか、
# またはキャプチャがあればキャプチャ内容のリストを返す。
# スカラコンテキストでの挙動は宿題。調べりゃ分かる。
# <td> には属性が付いて来ることがあるかもしれない。
# <td> かもしれないし <TD> かもしれない。
# 少し丁寧にレキシカルな名前付きループ変数を使う。
# 他にも配慮した点があるかもしれない。探してみよう。
# 改良の余地があるに決まっているので挑戦してみよう。
# 思い付きで書いた。後悔とテストはしていない。
5.10の新機能の sayと、~~について語って。
perlレベル2 レファレンス、デレファレンス、型グロブ、レポートフォーマット、 CGI全般
use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- say "スライムが現われた!";
あれ? Perlはswitch caseでなくて、 given whenになるの?
use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- my $foo; given ($foo) { when (/^abc/) { my $abc = 1; } when (/^def/) { my $def = 1; } when (/^xyz/) { my $xyz = 1; } default { my $nothing = 1; } } ↑これを実行すると、 Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 18. Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 19. Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 20. といわれます。$-の初期化なんてどうすればいいの?
no warnings;
>>859 そんなことしたら警告が見れないじゃないですか。
それとも、警告が出ても、無視していい場合もあるの?
$foo が undef -> undef を $_ に代入 -> when の正規表現対象が undef なんすけど如何致します? って事じゃねえの?手元に無いから確認でけんがさ。
>>857 ,858
perldoc について調べてください。
お望みの情報はあなたのコンピュータの中にあります。
perldoc perlsyn の中の "Switch statements" の項をご参照下さい。
その他新機能については perldoc feature で確認することができます。
どうぞよろしくお願いします。
perldoc perlsyn Switch statements これでいいの?
今回の警告は無視してもいいの? だめなの?
かまわないよ
, -ー --、_ ,,..- し、_,、_, - ' `ヽ、 / \ / /__ \ __ ヽ / ,,.. -ー/ - 、 ,..- 、 \ ー-`、ヽ.、 !,.-'' ..- '' ./ V ヽ .` Y むーし むーし (,,.-''´ l ・ | ・ .i | .| .! 八 ノ | ! .` ─ ´ ` ー ´ / お疲れ様でしたー 人 , ェェェ;、 ./ / \ \ ゝ─ー' / / \ / ` 、_` ─-----─''_´- "´ r''''''''つ | . ̄r'''''''''つ ̄ | | | | | | ゝ 丿 | | 丿.| フ .\ ` " .| _ _ ,.イ | `ー──────┴─'"´ ̄ / と" ̄ ̄ ̄ ̄ ̄`ー-ー" ̄ ̄ ̄ ̄ ̄ ヽ
しかし警告が出ないように書く方法はあるんですか? ないんですか? perldocは今よんでるところです
>>868 中身になんかを入れなさい、って意味の警告だったの?
>>868 解消されたのか?w
>>861 に書いた通りの筋書なら given 時に $_=$foo されて
当然 $_ は undef だった訳だが…
when(undef){} いれときゃいいだろ。
873 :
862 :2008/08/07(木) 22:02:17
>>863 それはやってみたらすぐにわかりましたよね。^^
何かわからないことがあった時にはまず試してみて、試してうまくいかなかったら、perldoc や Web や本で調べてみて、それでわからなかったら質問、という順番にしてもらえると助かります。
試してすぐにわかることや、すぐに説明が見つかるようなことは、答えるほうもあまりおもしろくありません。試し方や調べ方を知っていれば、ほとんど誰でも解決できてしまうことだからです。
また、そういった種類のことで、たくさんの人が質問したり過去ログを読んだりする掲示板を埋めてしまうのは残念でもあります。
調べ方を身につければ、誰かがあなたの代わりに調べなくても済むようになり、あなたも回答を待たずに済みます。
ぜひよろしくお願いします。
読みづらいことは投稿の段階でわかりましたよね。^^ 投稿の前には読みづらくないか試してみて、読みづらかったら改行などを入れてみて それで読みやすくなったら投稿という順番にしてもらえると助かります。 明らかに改行すべきレスは読んでいる方も面白く有りません。 そういったレスでスレを埋めてしまうのは残念です。 改行の仕方を覚えればきれいに読めるようになり汚いレスをみずにすみます。 是非よろしくお願いします。
use warnings; my $foo = undef; print 'Switch statements を調べさせても解決せんだろ' if $foo =~ /.*/;
$str = "aaa@bbb.co.jp" と代入した後、 if ( $str =~ /(.+)@(.+)/ ) { $a = $1; $b = $2; } とやっても、パターンマッチしません。 パターンマッチ中の @ を \@ としても駄目でした。 $str に代入文字列の @ を \@ と置き換えるとマッチしました。 しかし、実際、ここには、メールのログからパースしたメール アドレスがそのまま入ってくるので、\@ とは出来ません。 どうやったらうまくマッチさせられるでしょうか?
877 :
862 :2008/08/08(金) 00:02:53
>>874 すみませんでした。
>>875 >>857 に対しては有効だと思います。いわゆる switch を Perl で実現する構文についての説明そのもので、それが given () { when () {} } であること及びその詳細が明記されています。
>>858 に対しても同様で、"given(EXPR)" will assign the value of EXPR to $_ within the lexical scope of the block, から始まる部分に警告内容に関わる動作仕様について述べられています。
うまくいけば参考にして解決できますし、よしんば解決に至らなかったとしても、perldoc を引く練習にはなるはずです。
役に立っていてくれるとうれしいです。
>>876 まあとりあえずこれを実行してみろ。
$str = "aaa@bbb.co.jp";
print $str, "\n";
その次はこれな。
@bbb = ("X", "Y", "Z");
$str = "aaa@bbb.co.jp";
print $str, "\n";
880 :
876 :2008/08/08(金) 00:10:55
おっと、リテラルじゃなかったのね。失礼。
>>878 をどうぞ。
881 :
880 :2008/08/08(金) 00:13:13
s/名前:876/名前:879/; # もちつけ俺
>>878-879 さん
問題点が判り、やりたいパターンマッチが出来ました!
ありがとうございました。
可能性(1)
>>868 → 解決された
可能性(2)
>>872 → 解決された
可能性(3)
>>875 → 解決されなかった
(1)と(2)では、
双方とも解決はできたが、
読んでわかりやすいのは(1)かな?
885 :
875 :2008/08/08(金) 02:22:45
同じこと言われるもんを書いただけだから動かしても解決はしないよ。 use warnings して何を言われてたのか気付いて欲しかっただけで。
Perlもアイテム課金にすりゃーいいのに。 そうしたら親切ていねいなチュートリアルくらい 作るだろう。人口が増えた方がもうかるから。
無料のPythonに人が流れるよ
今のご時世に字下げを強制するのは惨すぎる。 FORTRANじゃあるまいし。 懐古趣味のオッサン言語やな。
そう思っていた時期が僕にもありました
forは無料だけど、whileは有料ですみたいな
いやwhileは無料だろう。 foreachはしょうがないかもしれんが って何の話だよ
じゃあwhileは無料アイテムね。 foreachは有料課金アイテムで、 ゲーム内通貨で50ゴールド。
もしかしてrequireって日本語ファイル名はだめ? 英語にしたら成功したんだけど。
my $file = 'テンプレ1.pl'; require 'encode("cp932", $file)'; ↑これだとだめなのかな?
下ので require できるようなファイル名はあんまりつけないと思うよ。
そもそもどんなファイル名にも日本語なんか使うなよ・・・
人それぞれ事情があるんだから、 事情も知らずに他人の仕事内容を強制するような意見は見苦しい。
まあ英語だと汎用性が有るよってぐらいだね
日本語だと何のファイルかわかりやすいってぐらいだね
ファイル名にはIOレイヤみたいの用意されてないからめんどくさいんだよね。
>>894 それはマッサージ師に
「おまいらって時給6,000円なの?」
って聞いているようなもんだぞ。
いや、まじで、日本語のファイル名は requireできないの? それとも、できるの?
あーでも、もし日本語のファイル名でrequireできるとしても、 最終的にはレンタルサーバーにアップロードして urlの一部になる可能性があるわけだから、全部 英語にしておいたほうがいいの?
日本語じゃなきゃいけない理由があるの?
なぁ世紀の超絶スクリプト言語、 すべての問題を解決するPerl6は どうしちゃったんだ? ちんぽ握ったまま、もう10年近くまってるんだが
Perl6さんはそのちんぽと一緒に壊死したよ
以下のようにスレッドとネットワークの実験をしていたところ躓きました。port1にtelnetで接続後、port2に接続しても望んだ動作(接続後コマンド画面にすぐ戻る)をしません。どこを書き直せば良いのでしょうか。ご教授下さい。 use strict; use warnings; use threads; use IO::Socket; use IO::Select; my $port1 = 7000; my $port2 = 7001; my $sock1 = IO::Socket::INET->new(LocalPort => $port1, Listen => SOMAXCONN, Proto => 'tcp', Reuse => 1,); my $sock2 = IO::Socket::INET->new(LocalPort => $port2, Listen => SOMAXCONN, Proto => 'tcp', Reuse => 1,); my $selecter = IO::Select->new; $selecter->add($sock1); $selecter->add($sock2);
while( 1 ) { my ($active_socks) = IO::Select->select($selecter,undef,undef,undef); foreach my $sock ( @{ $active_socks } ) { if( $sock == $sock1 ) { my $thr = threads -> create( \&thr1 ); $thr -> detach(); } elsif( $sock == $sock2 ) { my $thr = threads -> create( \&thr2 ); $thr -> detach(); } } } sub thr1() { my $new_sock = $sock1->accept; $new_sock->close(); } sub thr2() { my $new_sock = $sock2->accept; $new_sock->close(); }
while(1){}中にlast条件が無いんだけど無限ループになんない? つかwhile(1){}で囲む意図は?(そんなもんなのかな?IO::Socket知らないから…)
サーバープログラムなので繰り返し接続待ちできるようにするための無限ループです。 タブが消えてしまい読みづらいので全角スペースで置き換え、while以降を再度書き込みます。 while( 1 ) { my ($active_socks) = IO::Select->select($selecter,undef,undef,undef); foreach my $sock ( @{ $active_socks } ) { if( $sock == $sock1 ) { my $thr = threads -> create( \&thr1 ); $thr -> detach(); } elsif( $sock == $sock2 ) { my $thr = threads -> create( \&thr2 ); $thr -> detach(); } } } sub thr1() { my $new_sock = $sock1->accept; $new_sock->close(); } sub thr2() { my $new_sock = $sock2->accept; $new_sock->close(); }
tab1個を、全角スペース2個に 置き換えるスクリプトは、s///? それとも、tr///?
コマンド画面ってのがコマンドラインの意味なら無限ループ抜けないんだから戻る訳 無いんじゃ?
>>909 こういう話に見えてしまったのは酒のせいなのか
% perl 909.pl &
>(接続後コマンド画面にすぐ戻る)をしません。 $ とか、C:> とかが出ないで待ち状態になる、って意味かな?
また、自分でデバッグしないで質問か。
自分で作ったファイルは、libと、site/libと、 どっちのフォルダにつっこめばいいの? @incを見ると、libと、site/libと、2つのフォルダを 見てるようなんだけど。そのうちのどっちかに 突っ込めばいいんだよね? で、普通はどっちに入れておくのかな?
それで、日本語のファイル名は、 requireで呼び出せない、っていうことで FAですか?初心者向けの解説サイトとかに 書くかもしれないんで、なるべく正確に答えてください。
サブルーチンで、引数を受け取るには、 絶対に、@_を使わないとだめなの?
その程度で解説サイトとかやめてくれ
てかさ、サブルーチンの中で 引数をうけるとき、かならず ($c)=@_; ってしないとだめなのな。 うっかり $c=@_; って書いたら、配列の格納されている要素の個数が 代入されてしまって、原因突き止めるのに1時間かかったよ。
世界のwebサイトのSN比は日本語サイトに限らず、 どんどん2chの水準に近づいている。 webの熱死は近い。
>>921 サイトを作るのは構わんが、絶対に嘘は書くなよ
しっかりと調べて書け
じゃないとお前の嘘を信じてバカを見る奴が出てくる
927 :
デフォルトの名無しさん :2008/08/09(土) 12:59:33
あの一連の書き込みから精神病の臭いを嗅ぎ取らない奴ってなんなの?
がちでヤバいやつはPerlなんか理解できないし プログラマなんかは大なり小なり癖のある人が多いんじゃない
>>921 何ができて何ができないか、原理も含めて理解せずに解説サイトなんか作るんじゃねえ、迷惑だ。
ちなみにrequireで読み込めるか否かは、そのファイルをopenで読み込めるか否かにかかってる。
日本語ファイル名の扱いはものすごく環境依存性が高いので、正確な説明なんて無理。
>>920 自作のファイルについては、それがアプリケーション固有のものなら、それを置いてあるディレクトリに、環境変数PERL5LIBや-Iオプション、use lib等で@INCを操作してパスを通す。libやsite/libには入れない。
汎用的に作ったものについては、h2xsでモジュールの雛形を作成し、その中に自作のコードを突っ込んで、perl Makefile.PL、make、make installするとPerlのパッケージ管理機構がよきにはからってくれる。
いや、原理とかどうでもいいし 「ボクのパソコンだとこうすれば出来ました」 って情報で十分だ。本当か嘘かは見た側が判断すればいい。
>>921 >初心者向けの解説サイトとかに
>書くかもしれないんで、なるべく正確に答えてください。
初心者向け解説なら、
>>4 のテンプレにある。
他の人も言っていることだが、
まず、自分自身が初心者であることをよく認識することだな。
ディレクトリ舐めるとunicodeじゃなくてcp932でしかとれないからねぇ
requireするファイルの最後に、 1を書けって書いてある書物と、 1;を書け、って書いてあるサイトと、 説明がバラバラです。 どっちが正しいですか?
>>932 クックック、、、
まだ、、、私のことを「初心者」だと、、、思っているのか、、、?!
この私はすでにランダムに数値を生成し、
intで整数化し、その生成した数値をpushで
配列に投入し、しかも、その過程をwhileループで
10回繰り返し、しかもその結果をsay関数で
画面に出力するところまできているっ!!!
つまりっ、、、キサマこそが素人っ、、、、!!!
require 'encode("cp932", $file)'; で探しに行くファイルはcp932ですらないよねえ。 個人的に「できるのかできないのかどっち?」「FAですか?」の人は初心者枠に入れてない。
夏休み、早く終れ
>>935 あのさあ、なんか一人で盛り上がってるけど
お前だけだよマジに成ってんの、他の人はそんなノリノリじゃないから
見苦しいよそういう書き込み、その口調で友達とかに話しかけてみれば?
>>938 「目を合わせちゃダメよ! いないフリいないフリ」
ID入れろよ運営 透明アボーンできねぇだろ
>>924 せっかく空気読んで要素の個数返してるのに、、、っていう perl の愚痴が聞こえてきそうw
>>928 >>927 のコメントもどうかとは思うけれど、「癖」なんつーレベルじゃないのも確かだ。
社会生活営めねーだろこれ。
>>941 だなw
引数1つなら
$c = shift;
で充分だろうに
perlがしゃべったらおもしろいよな 「何か」みたいな。 「デフォルトの配列の先頭から 要素を一個取り出して、$cに入れときますねご主人様」 みたいな。
($c) = @_; $c = shift; $c = $_[0]; # $[ == 0 意図してないんだろうけど使い回せるセリフにしてあるな
さていまからハッシュの勉強をするお strictの時、 ハッシュもつかいはじめるまえに 初期化しないとだめなの? もしそうなら、ハッシュの初期化ってどうやるの? 配列の初期化はこのまえおそわったんだけど。
print文の中で、 -> を使うと、何か問題ある? say "$a -> $b"; みたいな。
use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- my $a; my $b; my %c; my $d; for ($d=1;$d<=10;$d=$d+1){ $a=int(rand(10000)) +1; $b=int(rand(10000)) +1; $c{$a}=$b; say "($d)$a -> $b"; } ↑これってsay関数の””ダブルクオーテーション内部で()パーレン使ってるんだけど、 問題ある?無い? 問題あるけど、たまたま、うまく動いた?問題ないから動いた?
use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- say "\n"; say "はーい、それでは、生徒番号で2人組み作ってー\n"; my $a; my $b; my %c; my $d; for ($d=1;$d<=10;$d=$d+1){ $a=int(rand(10000)) +1; $b=int(rand(10000)) +1; $c{$a}=$b; } my $count=1; foreach my $key (keys(%c)) { my $value = $c{$key}; say "($count)$key -> $value"; $count++; } print "\n\n"; say "先生!できました!\n";
ちょっと質問させてください。 配布しようと思ってperlでカウンターなどを作っているのですが ユーザー変数(パスワードとか背景色とか)って英語でどう書いたらいいでしょうか? あとシステム変数(ユーザーが変えることが出来ない変数)も。 一応user variablesとsystem variablesとしてるのですが プロの間ではこう書くみたいな定番な書き方はありますでしょうか? ちょっとわかりにくくなったと思うので例 #!/usr/bin/perl # user variables ←ここの名前と $pass = 'abc123' # system variables ←ここの名前を英語でかっこよく出来れば素人が知らないような単語で書きたい。 $a = $pass
>>950 どう書いたらいいでしょうか? って聞かれたら、
内容が伝わる名前で、且つアホと思われない名前を好きな様に書けばいいんじゃね?としか言えん
俺から見たら『システム変数』、『ユーザー変数』とか日本語で解説と共に段落とって固めて書いててくれた方が見やすくて助かる
あとperlや他の言語もそうだけど、プロは居てもそいつらの間に定番なんて無いと思うぞ
せいぜいグローバルは大文字で書くのが通例とか、その程度しかない
会社によって命名規則が星の数ほどあるだけだ
お前さんの望みは配布ソース開いた人に対して
素人が知らないかっこいい単語書いててこの人かっこいいなぁとか思われたい訳なんだから、質問の仕方が少しおかしいぞ
質問者の意図と関係ないけど $a を見るとシステム利用されそうだなと感じる
#「変数名」の話だよね?コメントの行の書き方では無いよね? 「ハンガリアン記法」<- ぐぐれ とか書き方はあるにはあるよ。
>>952 $aは$[や$\と同じで特殊変数だから本来の用途以外に転用するのはよくない。
コメントの行の話じゃないのか? 「ついでに変数名も」っていう風に読み取れなくは無いけど 変数名の付け方ならぐぐれば一杯出てくるはず あと$aって特殊変数だったのか、知らなかった
956 :
952 :2008/08/10(日) 17:33:17
なんで sort を思い浮かべたこっちにレスついたんだろう。 お題はコメント行のほうなんだと思いますよ。矢印で指定されてる箇所。
>>924 配列変数はスカラーコンテキストにおいて個数を返す。
一般的な方法 -> shiftとか添え字とかなんか
>>934 真を返すだけなので正しいとか別に。最後なのでセミコロンは省略できる。
全角で書かくと文字コードが違います。気持ち悪いです。
>>946 strictの仕様をよく読むよろし。
あと初期化じゃなくてただの宣言でいい。
>>947 printの中とか何か問題とか意味がわからないけど、
ダブルクウォートコンテキストに置いてはデリファレンスが優先される。
958 :
950 :2008/08/10(日) 17:36:46
>>953 コメントの行の書き方です。
日本語だったら自分でも考えられるのですが英語はどうも苦手で。
variablesとかsetupとかdifineとかいろいろあるのですが
プロのみなさんの間では何が一般的なのかな~と思って質問してみました。
>>957 ->
をかくと、こっちはただの矢印の意味で
表示させたいだけなのに、perlタンが勝手に
特殊な意味で受け取ってしまうのではないか?
と心配なのです。
デレファレンスがこの場合、可能性があると
いうことですか?
>perlタンが勝手に Perlは特定の誰かに合わせて仕様を変えない仕様で、調べてもらうことを前提に作られてます。 せっかくデリファレンスという餌を与えられたのに。。。
Perlだけじゃないけど、 文字コードの日本語まわりの処理ってなんでこんなにクソなの? マジでいい加減にしろよ。クソ野郎。 誰の責任だよ。出てこい。一発殴らせろ。
963 :
デフォルトの名無しさん :2008/08/10(日) 18:04:02
つ JIS , NEC , M$ , IBM。 あと、UNICODEコンソーシアムでまともな提言も出来ずに支那文字、チョン便所文字と一緒くたにされた日本のヘタレ研究者。
>>958 h2xs -X モジュール名
で拡張モジュールの雛形を作ってくれるので、それを見てみれば?
あんまり参考にならないかもしれないけど。
(というか、
>>958 のような区分にはなってない)
>>958 > 英語はどうも苦手で。
> difineとかいろいろあるのですが
なにげにワロタ
和んだ
和んだ
ワンダ - モーニングショット
>>962 英語圏でないって時点で、プログラミングのハンデがあるのは仕方ないよ。
日本人はプログラミングの本道とは外れたしょーもない部分で引っかかって生産性を損失してる部分が多すぎる。
requireのファイルの最後に、1を書かなくても 動いたのですが、これって書かなくてもいいってこと?
””ダブルクオーテンションの中で、 ->という記号を安易に使ってもいいの? それともだめなの?
>>970 最後に書いた文が式でその値が真なら動くよ。
初期化の成功失敗を伝えるために積極的に値を出し分けているんじゃなければ
最後に1;と書いといたほうが安心だし余計なところに頭を使わないですむので
みんなそうする習慣になっているというだけの話です。
>>971 安易に使うのはいかなる場合でも感心しないな。
% perl -e '$x->{foo}="hoge"; print "$x, $x->{foo}, ${x}->{foo}, ->$x->{foo}"'
HASH(0x934e880), hoge, HASH(0x934e880)->{foo}, ->hoge
>>973 半角スペースを開ければ問題ない?
- >
みたいな。
ようはデレファレンスとして解釈されてしまうんでしょう?
こっちは矢印記号として使いたいわけですが。
>>972 でもさ、requireで呼び出して使う場合もあるし、
呼び出さないで単独でファイル単体で実行させたい
場合もあるし、単独で使う場合って、ファイルの最後に
1;
を書いておいても、なんら問題はないの?
余計な記号があると心配じゃん。
数字を読み込んで、それをキャラクターにする プログラムを組んでみようと思って、こう書いたんだ。 use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- my $a; for ($a=0;$a<=100;$a=$a+1){ say $a." ".chr($a); }
そしたら、DOSプロンプトに出力するバージョンは、うまく動いた。 そんで、こんどは、テキストファイルに出力してみようと思ったのさ。 そんで、次のコードを書いた。 use warnings; use strict; use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; use feature qw( :5.10 ); $|=1; #---------------------------------- my $a; open (FILE,'> abc.txt') or die "$!"; for ($a=0;$a<=100;$a=$a+1){ say FILE $a." ".chr($a); } close (FILE);
そんで、できあがったabc.txtを、サクラエディタで、 utf-8で開いてみた。そしたら、文字番号0~32までが、 空白で、表示されてないのさ。 一方、DOSプロンプトに出したときは、文字番号0~32も 変な記号でいろいろ出ていたのに。なんで?
また新しいゲームのアイデア思いついたよ 配列Aを出して、mapで変換して、配列Bを表示する。 そんで、変換のロジックはブラックボックスにしておいて、 AとBだけを見せて、変換ロジックを推定する。 あたれば、得点。こういうゲーム。
980 :
デフォルトの名無しさん :2008/08/11(月) 11:38:20
Perlの初心者です。教えてください。文字コードの問題です。
# test for ActivePerl 5.8.8
use LWP;
my $m =LWP::UserAgent->new;
my $w = $m->get("
http://www.2ch.net/ ");
print $w->content;
を実行すると表示できます。2chのcharsetはsjisで$w->contentは
sjisを返します。次にuse encoding文を付け加えます。
# test for ActivePerl 5.8.8
use encoding 'cp932';
use LWP;
my $m = LWP::UserAgent->new;
my $w = $m->get("
http://www.2ch.net/ ");
print $w->content;
これは文字化けして表示できません(エラーも起こします)
$w->contentは相変わらずsjisを返してきます。
print文はsjisにもかかわらずutf8からsjisへ変換しようとして
エラーを起こすようです。
質問は
$w->contentがutf8を返すようにできないかというものです。
言い換えるとLWPのオブジェクトの文字列の保持をutf8とするように
設定できないかということです。
よろしくお願いします
>>978 >できあがったabc.txtを、サクラエディタで、
>utf-8で開いてみた。
サクラエディタって使ったことないけど、ファイル開くたびに
文字コード指定するの?それなら、sjis で開かないとダメじゃん。
utf-8にしたいなら、
binmode STDOUT => ":encoding(cp932)";
の行を削除。
983 :
デフォルトの名無しさん :2008/08/11(月) 12:55:49
>>981 うまくいきました。ありがとうございます。
# test for ActivePerl 5.8.8
use Encode;
use LWP;
my $m =LWP::UserAgent->new;
my $w = $m->get("
http://www.2ch.net/ ");
print encode('cp932', $w->decoded_content);
\x00-\x1F と \x20 の表示に CP932 やら UTF-8 は関係あるのか
>>982 なんで?
Windows上で、
perlから、txtファイルに出力すると、
絶対シフトJISになっちゃうの?
だから、シフトJISと指定して読み込まないと
だめなの?
binmode STDOUT => ":encoding(cp932)";
↑もしかして、これって、シフトJISで出力する、って意味だったの?
だからDOS窓では問題なく出力できてたの?
なんか、ここって質問の半分くらいが文字コードの問題だなw
全部同じ奴じゃねえの。文体的に
>>4 入り 5.10 の人とほかの人は区別したい。いちおう。
次スレの旬が近そうなので逝ってきます。
>>978 サクラエディタが制御文字を表示してないだけでないの?
__、 ,r´⌒ヽ,⌒ヽ,ヽ (⌒)、 .人 λ\、 ._____ \. \ 、 ヽ./ ー ー\ |\ \ ヽ./ ( ●) ( ●) | \ \ / (__人__) \ はいはい、どーもすみませんでした |. \ | ` ⌒´ | . |. |.\_ノ\ / . |. | | \______/ . | ) .| . . ̄ ̄ . | | .| | |.| .| . | | .| .| / / / ヽ, (__ノ ヽ、__つ
コロコロー (((● 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー ●))) コロコロー ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫 ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫 ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫 コロコロー (((● 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
いきなり氏ねって、どういう事ですか?君には社会の常識がないのですか? 普通は、『あのう、すいませんけれども氏んでくれませんか?』とか 『あなたはには、氏ぬという選択肢もありますよ』とか言うものですよ、 あなたみたいに最初から喧嘩腰だと、 言われた方は『じゃぁ氏んでみようかな』とかいう気持ちがなくなるものです。 まずは、親切丁寧に人に氏んでと頼むべきだと思いますよ。 そこから、人の輪と協調が生まれ、『よーし氏んでみるか』とか という気持ちが生まれるわけです。
/\___/ヽ /'''''' u ゚ '''''':::u:\ |(一),゚ u 、(一)、゚.| | 。 ,,ノ(、_, )ヽ、,, u.:::| 最新型の扇風機って暑いんだな 〃 ̄ヽ ~ | u ` -=ニ=- ' .:。::| なんか、オレンジ色に光ってるし r'-'|.| O | ~ \_゚`ニニ´ _::::/ `'ーヾ、_ノ ~ / ゚ u 。 \ | ,| |゚ / ・ ・ ヽ | | ,| | | 。 ゚ u |゚ | | ,| \\=====/ノ ,-/ ̄|、 (m) (m) ー---‐' (__)(__)
\ ポーニョ ポニョ / |\ ポニョ. | |\ ウ…ウーン… ∧_∧ | | \ ___ _∩∀゚∩) | | | | __ ( ;´д`) ̄|ヽ) | | | |\⌒⌒⌒⌒⌒⌒\ \| | \ \ \ \ | \ \ \ \| \ \|⌒⌒⌒⌒⌒⌒⌒| \ |_______| ↓翌日の頭の中 ポーニョポーニョポニョ:::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::ポーニョ::::::::::::::::::::::::::: :::::::::::::::(>'A`)> ウワァァァァ ::::::: :::::::::::::::( へへ ::::::::::::::::::::::::::::::::: :ポーニョ:::::::::::::::::::::::::ポーニョ:::::::::::::::::::::::::: ::::::ポーニョ:::::::::::::::::::::::::::::::::::::::::::::::::::
おちんちんのエラの部分に、ちいさいギザギザがあるんですが、 これって何かの病気ですか? 医者に診せたほうがいいでしょうか?
教えて良かったと思えるのは幸せなのだと噛みしめる今日この頃。だから、
>>997 は女医に診せてサマリ提出汁。
あづいよう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。