[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/17 02:25 / Filesize : 157 KB / Number-of Response : 572
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 43箱目



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通信するにはなんていうライブラリつかえばいいの






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<157KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef