1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ] "The duct tape of the Internet" こと、Perl についての質問箱です。 "There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: pc11.2ch.net/php/ ) CGI の質問は答えが Perl と全然関係ない話に帰着する場合が 多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2010/02/19 現在の最新版: 5.10.1 ▼ 前スレ Perlについての質問箱 42箱目 pc12.2ch.net/test/read.cgi/tech/1257139591/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-7 あたり
231 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 15:55:39 ] >>229 cpan moduleがencodeに対応してたりしてなかったりするものを混ぜると わけわかんなくなる場合がある。 関係してそうなmoduleかたっぱしからupdateしてみ
232 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:31:43 ] package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } ---- my $c1 = new TestC; my $c2 = new TestC; としたときに $c1 と $c2 の a が同じものになってしまいます。 ($c1 で編集すると $c2 も同じになる) インスタンスごとに配列も別の実態を参照してほしいのですがどうすればよいでしょうか?
233 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:50:56 ] 普通ならないけどな。編集して同じになったというのが わかるソースも出せよ。 package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } package main; $c1->{a}->[0] = 100; printf "c1: %d, c2: %d\n", $c1->{a}->[0], $c2->{a}->[0]; すくなくとも上記で試した限りでは結果は c1: 100, c2: 0 だった。
234 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:55:03 ] >>232 別物みたいだけど? package main; my $c1 = new TestC; my $c2 = new TestC; warn '$c1->{a} and $c1->{a}: ' . is_equal($c1->{a}, $c1->{a}); warn '$c1->{a} and $c2->{a}: ' . is_equal($c1->{a}, $c2->{a}); sub is_equal { my($x, $y) = @_; ($x eq $y) ? 1 : 0; } package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } 1; ==================== $c1->{a} and $c1->{a}: 1 $c1->{a} and $c2->{a}: 0
235 名前:232 mailto:sage [2010/04/23(金) 17:05:46 ] >>233 すいません、長くなりそうなのではしょってしまいました。 以下を実行すると c1 2 c2 2 と表示されます。@5.10.0 package TestC; ####new省略 sub push_array{ my $self = shift; my $a = $self->{a}; push @a, $_[0]; } sub get_count{ my $self = shift; my $a = $self->{a}; return @a; } package main; my $c1 = new TestC; my $c2 = new TestC; $c1->push_array(1); $c2->push_array(2); print "c1 ".$c1->get_count."\n"; print "c2 ".$c2->get_count."\n";
236 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:18:56 ] use strictしなかった結果がこれだよ!
237 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:40:45 ] $a!
238 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:43:02 ] $a ≠ @a
239 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:44:47 ] $aと@aは全くの別物。このプログラムに登場する@aはmyで宣言されてない から常に同じパッケージ変数が使われてる あと$a, $bはsortが使う特別な変数なのでそれ以外の用途で使うとろくな目に 会わないからやめとけ。
240 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:07:59 ] $a使った結果がこれだよ!
241 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:08:54 ] sortが$a, $bを使うという仕様を見た時は目ん玉飛び出たな どんな糞仕様だよと
242 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:56:57 ] どこが? Perlなら妥当な仕様だろ。
243 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:14:28 ] $_ とか $@ とか $! とかも糞仕様
244 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:26:09 ] つまりPerlは糞言語だから糞仕様なのがむしろ妥当だと
245 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:34:24 ] $aと$bをどう使うと降順になるのか何度やっても覚えない そもそも、降順と昇順の意味がピンと来ない
246 名前:232 mailto:sage [2010/04/23(金) 22:44:39 ] 返答が遅くなり申し訳ありません。 色々と得心がいきました。 解決したところで引き続き頭をこねこねしたいと思います。 ありがとうございました。
247 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:26:38 ] $_やら$@やら$!はだれがプログラムしても同じ変数だから分かりやすい っていう話があってだな
248 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:01:40 ] >>247 なるほど そう考えると確かにと思わざるを得ない ただあまり使わない特殊変数は検索かけても引っかかってこないのがウザい
249 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:03:24 ] perldoc perlvar
250 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:26:59 ] とりあえず>>245 が頭が悪いと言う事はわかった
251 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 01:56:06 ] UTF-8 で書かれたテキストファイル hoge.txt の内容を Windowsのバッチファイルからワンライナーで msg="おはよう" から msg=こんにちは に置換したいんですが・・・ perl -i.BAK -pe "s/(?<=msg=).*/こんにちは/" hoge.txt これだとシフトJISで書き込まれてしまうんです。 UTF-8 で書き込む方法があれば教えてください。
252 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 10:37:27 ] 見つけたよ特殊変数のスレ 同じプログラム板じゃないか Perlの特殊変数は氏ね。絶対に使うな。可読性下がる pc12.2ch.net/test/read.cgi/tech/1141988910/34 34 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/11(土) 22:02:24 特殊変数は、他人や「昔の自分」が書いたソースに出てきても まったく可読性に影響の無い、数少ない構成要素の一つだろう。 同じ名前の変数には、常に同じ意味を持つものが入ってるんだから。 「これ何のためにあるの?何が入ってるの?」って状態になるのは普通の変数のほう。
253 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 14:02:59 ] >>251 文字コードがsjisであれば、 perl -i.BAK -pe -MEncode "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt >>252 可読性とか書きようによってはいくらでも良くなるし悪くもなるもんなのに、言語仕様のせいにするのはおかしいよね。 他の言語から見れば、Perlは変数の前に$@%*とか使ったり、特殊変数の意味が理解できないだろうから気持ち悪く映るんだろうけど。
254 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:26:39 ] $@%があるからスカラなのか配列なのか、分かりやすくて良いと思う俺って少数派?
255 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:27:43 ] 多数派
256 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 20:20:59 ] じゃあリファレンスも別のプリフィクスを採用するべきだったよね あと配列もハッシュも中身にアクセスするとき$プリフィクスを要求するのは分かりにくいよね(これはperl6で変更になるけど)
257 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 20:23:23 ] あれはあれでいいんだよ
258 名前:194 mailto:sage [2010/04/24(土) 20:59:32 ] >>231 ,230 Macだといけました。 Windowsだと化けるんだな。。 ppmのモジュールは確かに古かったから、cpanで入れ直してみようかと思います。 ちなみにeshellで出力してるので、winでもcp932にencodeしなくても大丈夫です。 てかこれで途中までは日本語がきちんと表示されます。
259 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 01:08:38 ] >>256 おれはperl5の方が好きだ スカラだから$で統一されててわかりやすい
260 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 03:03:46 ] 最終的に得るものがスカラ、という考え方か 例えばデリファレンスで配列を得たけりゃ@$array_refだし 確かにそりゃそうだなぁ
261 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 05:23:43 ] あれだよな。@は配列変数 って書くサイトや本が悪いよな。 配列へのアクセスなのに。
262 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:58:03 ] >>260 そういう思想で作ってあるって習ったから覚えやすかった
263 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:29:25 ] @names = ('OZA-', 'POPPO', 'MASZOE'); @mes = ('012345678901234567890123456789', 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ', いいいいい); 例えばこのようなものを、次のように2つのカラムがあるかのように出力したいのですが、どうしたらできるでしょうか? OZA- .| 012345678901234567890123 ...| 456789 POPPO | あいうえおかきくけこさしすせそたちつてとなにぬ ...| ねのはひふへほ MASZOE .| いいいいい こんなのでできるかなと思ったのですが無理でした… format AAA = @<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<< ~~ | @<<<<<<<<<<<<<<<<<<<< . よろしくお願いします。
264 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:47:40 ] と思ったらformatでできました。お騒がせしました。
265 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:20:18 ] >>253 ありがとうございます。すごい勉強になります。 > perl -MEncode -i.BAK -pe "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt だと Modification of a read-only value attempted at C:/Perl/lib/Encode.pm line 195, <> line 280. って叱られるので perl -MEncode -i.BAK -pe "s/(?<=msg=).*/$s='こんにちは';Encode::from_to($s,'sjis','utf8');$s/e" hoge.txt でできました! Jcode使えば少し短くなりました perl -MJcode -i.BAK -pe "s/(?<=msg=).*/Jcode->new('こんにちは','sjis')->utf8/e" hoge.txt
266 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:59:43 ] Perlの特殊変数って言っても、使うのは $_ $@ @_ とかほとんどこんなもんだろ。全部覚えてる奴なんてまずいない。
267 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:39:27 ] 最低限:$_ @_ $1〜$9 $a $b 覚えてると便利:$@ $! $. $/ $? $$ ゴルフやるなら:$\ $, $" $& $` $' @F
268 名前:デフォルトの名無しさん [2010/04/26(月) 21:46:22 ] open IN,"file"; while(<IN>){ $str .= $_; } file内のテキスト全てを、$strというスカラー変数に代入してみました。 ファイルサイズが小さければ問題ないが何万行とかだと代入処理に失敗しますよね?
269 名前:(!>>268) mailto:sage [2010/04/26(月) 22:29:11 ] そういえば数値はスカラに2^1023以上、2^1024未満が入ったけど、 このヘンの上限というか仕様ってどこか載ってます?
270 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:29:24 ] >>266 それは文法の一部で、特殊変数じゃない
271 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:49:33 ] >>268 open IN,"file"; read IN,$str,-s IN;
272 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 03:17:45 ] use File::Slurp; $str = read_file('filename'); >>268 メモリあれば大丈夫だよ。ただ毎行 .= すると遅い
273 名前:デフォルトの名無しさん [2010/04/27(火) 17:40:54 ] 教えてエロい人 perlはいつからスカラの要素を参照するときに@で参照できるようになったんだ? my @sca = (1,2,3); print $sca[1]; // OK... print @sca[1]; // OK?! @sca[1] = 'x'; print @sca[1]; // OK?!?!
274 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:49:04 ] >>273 それスカラじゃなくてたまたま1要素の配列スライス。 配列スライス自体はperl4の昔からすでにあった。 それより前はシラネ
275 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:53:30 ] my @sca = (1,2,3); @sca[0..2] = "a".."c"; print @sca[0..2], "\n", @sca[0, 2], "\n", @sca[0];
276 名前:273 mailto:sage [2010/04/27(火) 18:08:51 ] >>274 ,275 なるほど!とんくす!
277 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:10:07 ] xpでactiveperl v5.8.9を使ってたら、 使えてたスクリプトが急に「問題が発生したため」云々のウィンドウを出して止まるようになった ファイルが12728あるディレクトリでreaddirをしたのが原因みたい ファイルの少ないところで使うと問題ない なんか制限あったっけ
278 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:25:34 ] 違った 260文字あるファイル名のせいだった
279 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 17:50:08 ] Perl/Tkで作ったテキストウィジェットに1秒置きに1-10の数字を表示させるにはどうすれば良いですか?
280 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 22:56:37 ] >>279 search.cpan.org/~srezic/Tk-804.028/pod/after.pod
281 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:50:31 ] バッチファイル(hoge.bat)の1行目に PATH C:\hage;%PATH% と「挿入」したいんですけど、 ワンライナーでできますか? できるならやり方を教えてください。
282 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:00:35 ] open BAT '>hoge.bat'; print BAT 'PATH C:\hage;%PATH%';print BAT <BAT>; こんな感じ?
283 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:07:04 ] 愚直に perl -e "open my $FH,'<','hoge.bat';my @l=<$FH>;close $FH;open $FH,'>','hoge.bat';print $FH \"PATH C:\\hage;\%PATH\%\n\",@l;"
284 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:15:23 ] perl -p0i -e 's/^/PATH C:\\hage;%PATH%\n/' hoge.bat Windowsだとシングルクオートじゃなくてダブルクオートじゃないとだめなんだっけか でもこのままやると%PATH%が展開されちゃったりするのか?よくわからんから適当に直してくれ
285 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 17:13:28 ] >>284 できました!ありがとう。 perl -i.BAK -p0 -e "s/^/PATH C:\\hage;%%PATH%%\n/" hoge.bat
286 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 01:58:11 ] perlのスクリプトを含むWindowsのパッケージを setup.exe みたいな塊にまとめたいのですが 何がおすすめでしょうか? 昔単なる実行ファイルだけのときは innoSetup使ってたけど
287 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 07:21:30 ] PAL Perl2EXE
288 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:04:34 ] 関数の命名でヒントください 「array化」を英語で書くとしたら 「arraylize」「arrailise」「arrailize」、 どれにしたらよいでしょうか? テキストを読みこんで、それを配列に格納する というありふれた機能を持つ関数の名前です 下のように使っています my @list = arraylize ( "list.dat" ) ; sub arraylize { my $name = $_[0] ; open ( FH ,"< $name" ) ; my @listArray = <FH> ; close (FH) ; return @listArray ; } 他にも、もっと語呂のいい名前があったら教えてください それ以前に、同じような動作をするものがあったら知りたいです
289 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:16:00 ] いきなりファイル名でというのは知らないけど、強いて言えば IO::Handleのgetlinesが近いかなぁ。 本題とは関係ないが、せめてopenのエラー処理( or die $! をつける程度でいいよ)はやっとけ。後で苦労するぞ。
290 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:27:01 ] 「ファイルを読み込んで配列を返す」処理につける名前にしちゃ arraylize は筋が悪いな readfile なり readlines なりでいいだろ どうしても array が重要だっつーんなら make_array
291 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:30:10 ] まんまでいいなら、file2array
292 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:35:40 ] sub arraylize { my $name = shift ; open ( my $fh ,"<", $name ) ; my @listArray = <$fh> ; close ($fh) ; return @listArray ; } 関係ないけど
293 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:39:50 ] >「arraylize」「arrailise」「arrailize」 l はどっから出てきたんだよ
294 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:18:58 ] セパレータが指定されたら split した配列を返したり、 配列だったらそのまま返したり、 ハッシュだったら key/value をセパレータで繋げた配列を返したり・・・ そこまでやって、初めて arraylize を名乗っていい。 そう思うんだ。 どうでもいいけど
295 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:37:18 ] to_arrayじゃダメなん?
296 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:12:49 ] ありがとうございます 単純にfile2arrayにします エラー処理や ファイルハンドルに$fh、 そこのところ貰います
297 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:42:16 ] my %tmp; @tmp{qw(foo bar baz)} = split(/,/, $_, 3); push(@result, \%tmp); みたいなコードがあるんですが、これを %tmp を使わずに一行で済ます書き方ってあるでしょうか。 mapあたりでできそうなんだけど思いつかない… (foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。
298 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:51:29 ] >>288 わざわざ作らんで use File::Slurp; my @list = read_file("list.dat"); しなよ。
299 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:58:34 ] >>297 > (foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。 List::MoreUtilsになにかあるんじゃ
300 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 15:01:31 ] perl -e "print ((qw(foo bar baz),split(/,/, 'xxx,yyy,zzz'))[map{$_,$_+3}(0..2)]); fooxxxbaryyybazzzz あんまやるもんじゃないな
301 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:11:01 ] 頭がおかしくなりそうだ TMTOWTDIと言うけど、杉樽歯泳場猿画五都市と言う名言もあるし
302 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:17:03 ] >>297 use List::MoreUtils qw(zip); $_ = '1,2,3'; push @result, {zip @{[qw(foo bar baz)]}, @{[split /,/, $_, 3]}};
303 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:23:58 ] >>299 おお! と思って List::MoreUtils の pairwise や mesh が使えるかと思って試してみました。 が、一旦変数に入れないとARRAYとして解釈してくれずダメでした… #NG print mesh qw(foo bar baz), (split(/,/, "1,2,3")); # compilation errors #OK my @array1 = qw(foo bar baz); my @array2 = split(/,/, "1,2,3"); print mesh @array1, @array2;
304 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:25:12 ] >>302 入れ違いになりました。 素晴らしい。使わせていただきます。ありがとうございます。
305 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:35:48 ] >>297 >(foo, bar, baz, 1, 2, 3) なリストを (foo, 1, bar, 2, baz, 3) に変換する関数があればいいんだけど。 変数一つ作っていいならこんな関数かな my @arr = ('foo', 'bar', 'baz', 1, 2, 3); my $half = $#arr / 2; my @result = map { +($arr[$_], $arr[$_ + $half + 1]) } (0 .. $half);
306 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:07:39 ] >>302 いったん無名配列への参照[]にして それを@{}で、参照先の配列に戻して渡している という理解でいいのかな?
307 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:10:34 ] >>306 そだね ttp://perl-users.jp/articles/advent-calendar/2008/14.html
308 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:12:08 ] >>305 なんで3行で済ます方法を書いたの?
309 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:14:06 ] >>308 二行だろ
310 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:18:09 ] >>308 何揚げ足とろうとしてんのw
311 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:32:43 ] perl -e "print join',', map{(qw(foo bar baz))[$_],(split /,/, 'xxx,yyy,zzz')[$_]}(0..999);#十分に大きい値 foo,xxx,bar,yyy,baz,zzz >>300 よりはマシかなあ…
312 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:51:55 ] >>305 sub zip{ map { $_, shift @{$_[1]} } @{$_[0]} } print zip [1,2,3],[4,5,6] ;
313 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:02:25 ] perl -e '@array = qw/xxx yyy zzz 1 2 3/; print map { $array[$_] => $array[$_ + @array / 2] } (0..($#array / 2));'
314 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 21:28:38 ] >>293 ヒント:シノラー
315 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:52:02 ] TwitterのAPI叩くにはどうすればいいですか Net::Twitterとかじゃなくて、純粋にHTTP使ってその辺から学習したいのです
316 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:18:20 ] usy.jp/twitter/index.php?Twitter%20API#ga975f17 サンプル集
317 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:51:12 ] use Net::Twitter; 役にたたなかった
318 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:37:45 ] win32でパスを含めて 256 バイト以上のファイル www.namazu.org/ml/namazu-win32-users-ja/msg01951.html この問題ってもう解決されています?
319 名前:デフォルトの名無しさん [2010/05/11(火) 00:00:10 ] Perlのファイル読み込みと配列格納について質問があります。 エクセルから出力した行列状態になっているcvsファイルをPerlに読み込ませて、 @a、@b、@cにそれぞれの行のデータを格納したいです。 なので、二次元配列のようなことをしないといけないと思うのですが、 Perlで二次元配列のような処理をするにはどうすればよいのでしょうか? また行列状態になっているファイルを配列に格納する他の良い方法はありますでしょうか? よろしくお願いします。
320 名前:319 [2010/05/11(火) 00:14:07 ] 追記です。このような内容のファイルを扱っています。 1 Takehara Shinji 500 600 1300 2 Hatakeyama Takanori 569 795 1560 3 Kouki Kameda 785 889 2695 4 Daiki Kameda 758 784 9000 5 Tomoki Kameda 580 120 984 そして、左から4行目〜6行目にある数値を縦に、 @a、@b、@cに格納し、 $a[0] を参照すると、500 $a[1] を参照すると、569 $b[0] を参照すると、600 $b[1] を参照すると、795 $c[0] を参照すると、1300 $c[1] を参照すると、1560 といった具合にしたいです。
321 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 00:16:24 ] >>319 ・「perl 配列の配列」でググる ・「perl CSV」でググる
322 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 00:40:12 ] >>320 1 #! /usr/bin/perl 2 3 use strict; 4 5 my(@data, @array); 6 @data = ( 7 '1 Takehara Shinji 500 600 1300', 8 '2 Hatakeyama Takanori 569 795 1560', 9 '3 Kouki Kameda 785 889 2695', 10 '4 Daiki Kameda 758 784 9000', 11 '5 Tomoki Kameda 580 120 984', 12 ); 13 14 foreach(@data){ 15 push(@array, [@{[split(/\s+/, $_)]}[3..5]]); 16 } 17 18 local $\ = "\n"; 19 20 print $array[0][0]; #=> 500 21 print $array[1][0]; #=> 569 22 print $array[0][1]; #=> 600 23 print $array[1][1]; #=> 795 24 print $array[0][2]; #=> 1300 25 print $array[1][2]; #=> 1560
323 名前:デフォルトの名無しさん [2010/05/11(火) 01:17:33 ] >>322 ありがとうございます。 外部からファイルを読み込む場合はどうすればよいのでしょうか?
324 名前:321 mailto:sage [2010/05/11(火) 01:45:17 ] >>323 だから「perl CSV」でググれと教えたのに。ググれば ”csvファイルを読み込んで配列の配列に変換に変換する” ttp://d.hatena.ne.jp/perlcodesample/20080728/1217336230 こんくらいすぐに出てくるだろ
325 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 01:51:03 ] >>322 を改良できんレベルの人なら>>324 のリンク先飛んでもイミフだろ
326 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 01:53:57 ] >>323 use IO::File; my @data = IO::File->new('data.txt', 'r')->getlines; chomp @data;
327 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:04:22 ] use File::Slurp; my @csv = read_file('hoge.csv'); chomp @csv;
328 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:19:44 ] >>322 [@{[split(/\s+/, $_)]}[3..5]] は [(split /\s+/, $_)[3..5]] のほうがいいよね。この場合に限れば /\s+/, $_ が無くてもよし。 つーかCSVなら最初からText::CSV(_XS)?使えばいいじゃんって話だけど。
329 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:46:24 ] >>328 おお、/\s/まで省略できるのか 初めて知った ありがt
330 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 03:42:18 ] $_ = " foo\nbar\tbaz" としたとき、 split(/\s+/) だと ('', 'foo', 'bar', 'baz') が返るけど、 引数なしのsplit または split(" ") なら ('foo', 'bar', 'baz') になるってことだけ注意な。
331 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:12:21 ] HTTP通信するにはなんていうライブラリつかえばいいの