トップページphp
981コメント337KB

くだすれPerl(超初心者用)3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/31(火) 22:20:27ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。

前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/

関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0304nobodyさん2009/09/28(月) 00:39:43ID:???
たしかクッキーにある値がセットされてないと書けなかった気がする
03053012009/09/28(月) 08:23:50ID:ae4P5TMo
ネット上に転がってる仕様のまとめは一通り目を通してあるつもりなんですが、
クッキーが必要でないだろう初回書き込みのポスト(書き込み確認画面へ移動)
が通らないんですよね・・・
0306nobodyさん2009/09/28(月) 09:32:00ID:???
クッキーを覗けばわかる
専ブラとかもそのせいで書けなくなって、一時期話題になってるから
探せばすぐにわかると思う
03073012009/09/28(月) 09:48:59ID:???
プログラム中のPOST先が間違っていました・・・。
またちょっと自力で奮闘してみます
お騒がせしました。
0308nobodyさん2009/09/30(水) 10:06:13ID:???
Sniffer::RTMPのtar玉どこかからダウンロードできませんか
0309nakacyan2009/10/01(木) 09:38:30ID:Q77nXvDi
書き込み先がここであっているかわかりませんが、質問させていただきます。

現在、大学の課題でミリセック単位での処理時間を計算するスクリプトを作成しているのですが、
どうロジックを組めばいいのかわかりません。
肝になるのは識別子でソートをすることとms単位で時間差分をとることだと思うのですが、
後者はtime関数等を使えば実現できるのでしょうか?
ヒントになりそうなスクリプトをいご教授いただけると助かります。


課題は以下になります。

あるPCの処理時間を出力したmeiji_test001.csv meiji_test002.csv というファイルがある。
ファイルの詳細は以下。

meiji_test001.csv
 ファイル名,処理時間,区別,識別子
 meiji_test001,01:30:22.392,S,SHJAKIU02387HQ87OK.dd1
 meiji_test001,01:31:44.223,S,LKIE832JUH20KJKKKH.dd1
 meiji_test001,01:35:56.356,S,KJNEYHQPLK95718HNJ.dd1
 meiji_test001,01:36:47.313,S,OQI81KMHFDJ98NBHJI.dd1
 meiji_test001,01:40:14.009,S,09KAJNMCVZH83KJEUL.dd1
 meiji_test001,01:42:58.763,S,KJQPOI045KMNJKMAUU.dd1
 meiji_test001,01:43:59.443,S,KI948MMNGYWUQIIIOK.dd1
0310nakacyan2009/10/01(木) 09:40:29ID:Q77nXvDi
>>309
続きです
meiji_test002.csv
 ファイル名,処理時間,区別,識別子
 meiji_test002,01:30:21.002,R,SHJAKIU02387HQ87OK.dd2
 meiji_test002,01:31:24.003,R,LKIE832JUH20KJKKKH.dd2
 meiji_test002,01:34:22.106,R,KJNEYHQPLK95718HNJ.dd2
 meiji_test002,01:35:22.003,R,OQI81KMHFDJ98NBHJI.dd2
 meiji_test002,01:39:06.009,R,09KAJNMCVZH83KJEUL.dd2
 meiji_test002,01:41:40.103,R,KJQPOI045KMNJKMAUU.dd2
 meiji_test002,01:42:34.023,R,KI948MMNGYWUQIIIOK.dd2

それぞれのファイル内で識別子をキーに処理時間を比較し、
同一のものがあれば処理時間を計測し、ログファイルに出力せよ。
同一のものが存在しない場合はなにも処理を行わない。
処理時間はミリセック単位(ms)で表示し、ログファイルには以下の形で出力すること。
※区別Rには処理時間を出力しない。
meiji_Kekka.csv
 ファイル名,処理時間,区別,識別子,処理時間
 meiji_test001,01:30:22.392,S,SHJAKIU02387HQ87OK.dd1 01.390
 meiji_test002,01:30:21.002,R,SHJAKIU02387HQ87OK.dd2
 meiji_test001,01:31:44.223,S,LKIE832JUH20KJKKKH.dd1 20.220
 meiji_test002,01:31:24.003,R,LKIE832JUH20KJKKKH.dd2
 meiji_test001,01:35:56.356,S,KJNEYHQPLK95718HNJ.dd1 01.34.250
 meiji_test002,01:34:22.106,R,KJNEYHQPLK95718HNJ.dd2
 meiji_test001,01:36:47.313,S,OQI81KMHFDJ98NBHJI.dd1 01.25.310
 meiji_test002,01:35:22.003,R,OQI81KMHFDJ98NBHJI.dd2
 meiji_test001,01:40:14.009,S,09KAJNMCVZH83KJEUL.dd1 01.08.000
0311nobodyさん2009/10/01(木) 11:29:20ID:???
>>309
っ[Time::HiRes]
0312nobodyさん2009/10/01(木) 11:30:52ID:???
>>311
あ、ちがうか。自分で計測するんじゃないのか。
0313nobodyさん2009/10/01(木) 12:16:35ID:???
>>309
ム板の宿題スレ逝けよ。webprogじゃねーし。
つか単純にsec*1000でmsの精度にすればいいだけの話に見えるけどな。
0314nobodyさん2009/10/01(木) 12:26:41ID:???
つsort, uniq
0315nobodyさん2009/10/01(木) 13:49:13ID:???
最近の大学ってperlなんか教えるの?
sub f{local$_=$_[0];/(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,3})/?($1*3600000)+($2*60000)+($3*1000)+$4:undef}
0316nobodyさん2009/10/01(木) 19:01:07ID:???
明治大学か
0317nobodyさん2009/10/01(木) 21:32:35ID:???
>>309-310
勉強中の自分にちょうどよい題材なので作った。
>>317-319がそのコード。


my $file1 = 'meiji_test001.csv';
my $file2 = 'meiji_test002.csv';
my $output_file = 'meiji_Kekka.csv';
my %data_of;

open my $fh, $file2 or die $!;
my @labels = split /,|\n/, <$fh>;

while ( my $line = <$fh> ) {
chomp $line;
my @data = split /,/, $line;
my $id = ( split /\./, $data[3] )[0];
$data_of{$id} = \@data;
}

close $fh;
0318nobodyさん2009/10/01(木) 21:33:21ID:???
open my $out, '>', $output_file or die $!;
print {$out} join(',', (@labels, '処理時間')), "\n";

open $fh, $file1 or die $!;
<$fh>;

while ( my $line = <$fh> ) {
chomp $line;
my @data = split /,/, $line;
my $id = ( split /[.]/, $data[3] )[0];

if ( exists $data_of{$id} ) {
print {$out} join(',', @data), ',';
print {$out} interval(Start => $data_of{$id}[1], End => $data[1]), "\n";
print {$out} join(',', @{$data_of{$id}}), "\n";
}
}

close $fh;
close $out;
0319nobodyさん2009/10/01(木) 21:34:59ID:???
sub interval {
my %time_of = @_;
my (%sec_of, %interval);
my @sec_for_unit = ( { unit => 'hour', sec => 3600 }, { unit => 'minute', sec => 60 } );

while ( my ($when, $time) = each %time_of ) {
if ( $time =~ /^(\d+):(\d+):(\d+\.\d+)$/ ) {
$sec_of{$when} = $1*3600 + $2*60 + $3;
} else {
require Carp;
Carp::croak("Invalid time format : $time");
}
}

$interval{sec} = $sec_of{End} - $sec_of{Start};

for my $hash (@sec_for_unit) {
my ($unit, $sec) = ($hash->{unit}, $hash->{sec});
if ( $interval{sec} >= $sec ) {
$interval{$unit} = int $interval{sec} / $sec;
$interval{sec} -= $interval{$unit} * $sec;
}
}

my $interval_time;
$interval_time .= sprintf '%02d:', $interval{hour} if $interval{hour};
$interval_time .= sprintf '%02d:', $interval{minute} if $interval{minute};
$interval_time .= sprintf '%06.3f', $interval{sec};

return $interval_time;
}
0320nobodyさん2009/10/01(木) 21:40:23ID:???
>勉強中の自分にちょうどよい題材

だからこそ課題になってるってのになぁ・・・
最近の学生はホントゆとり過ぎる
0321nobodyさん2009/10/01(木) 22:24:45ID:???
ブラゲー(FFA)のマクロを組むことをめざしてPerl触ってるんで
実験としてCGIに無限にPOSTするのをつくったんですが、どうもうまくいかないです。ループをきると正常に作動しますけどループをいれた瞬間動かないです。コンパイルエラーはでないのに・・・。以下ソース複数で書き込みします
#!/usr/local/bin/perl -w
use strict;
use Socket;
open(IN,"hoge.txt");
my $Length;
my (@list,$line);
while($line = <IN>){
Connect();
@list = split(/\t/,$line);
$Length = length($list[1]) + 5;
print SOCKET "POST /manko.cgi HTTP/1.0\r\n";
print SOCKET "Content-Length: $Length\r\n";
print SOCKET "\r\n";
print SOCKET "unko=$list[1]\r\n";
while(<SOCKET>){
m/^\r\n$/ and last;}

while(<SOCKET>){
print $_;
}
}
0322nobodyさん2009/10/01(木) 22:26:10ID:???
sub Connect{
my($host,$port) = ("localhost","80");
my $iaddr = inet_aton($host) or die "無効なhost!";
my $sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or die "ソケットを作成できなかった!";
connect(SOCKET,$sock_addr);
select(SOCKET); $|=1; select(STDOUT);
return 0;
}

どこがわるいのか指摘お願いします。
whileを($line = <IN>)を$line = <IN>;にすると動くみたいです
0323nobodyさん2009/10/02(金) 12:12:13ID:???
>>322
どうみてもF5よりもタチの悪い攻撃スクリプトなので回答は控える。
他の住民もスルー希望。
0324nobodyさん2009/10/02(金) 13:50:59ID:???
>>322
foreach (glob('C:\ ')) { unlink $_ }
0325nobodyさん2009/10/02(金) 23:48:23ID:fo52aLk6
>>300
今更なんだがそのSSHとやらを誰か詳しく教えてくれ
0326nobodyさん2009/10/03(土) 00:12:36ID:???
板違い
0327nobodyさん2009/10/03(土) 05:27:39ID:???
>>325
嫁。
http://ja.wikipedia.org/wiki/Secure_Shell
0328nobodyさん2009/10/05(月) 03:02:35ID:???
現状、以下のようなコードがあります。

map { eval '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c);

evalをループの中に入れるのは効率が悪いと
あちこちに書いてあったのでevalを外に出したいのですが、
以下のように記述したところ、上手く動いてくれません。

eval q|map { '$' . $_ . ' = $arg{' . $_ . '}' } qw(a b c)|;

どういう風に記述すれば動くようになるでしょうか。
よろしくお願いします。
0329nobodyさん2009/10/05(月) 05:08:20ID:???
$a = $arg{a};
$b = $arg{b};
$c = $arg{c};
0330nobodyさん2009/10/05(月) 07:59:45ID:???
>>328
こんなんとかはどう?

eval join q{}, map "\$$_ = \$arg{$_};", qw(a b c);
0331nobodyさん2009/10/05(月) 11:49:15ID:???
>>330
3回evalしちゃ意味ないだろw
0332nobodyさん2009/10/05(月) 21:32:31ID:???
超初心者です。
ホームページを取得するコードを書いたのですが、日本語部分が文字化けします。
ググって、chcp 65001やbinmode STDOUT, ':encoding(cp932)';など試してみましたが、解決できませんでした。
既出の質問かも知れませんが、アドバイスいただれば幸いです。

ソース

#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::Simple;

use utf8;
my $url = "http://yahoo.co.jp/index.html";
my $response_string = get($url);
print $response_string;

[環境]
WindowsXp SP3
ActivePerl 5.8.9 Build 826
Windows メモ帳
ファイル保存形式 utf8
コンソール Windows標準コマンドプロンプト

よろしく、お願いします。
0333nobodyさん2009/10/05(月) 23:18:28ID:???
>>332
utf-8からcp932に変換したいのなら、from_toを使えばいいと思います。

my $response_string = get($url);
#-- 追加 --------
use Encode;
Encode::from_to($response_string, 'utf8' => 'cp932');
#---------------
print $response_string;

use utf8の基本は、外部から来る文字列は、Perlの内部表現にし(decodeする)、文字列を
外部に出力するときは、Perlの内部表現から所望の文字コードに変換する(encodeする)
です。

Perlの内部表現はUTF-8を使用しているため、UTF-8で入ってくる外部からの文字列は
変換が必要ないと思われがちですが、内部表現でのUTF-8ではUTF-8フラグというのを
立てて、単なるUTF-8(バイナリ列)と、内部表現でのUTF-8を区別しています。

そのため、UTF-8の文字列であろうと、内部表現にするためには、decodeする必要があります。
質問のコードをその理念に基づいて書き直すと、

use utf8;
use Encode;

binmode STDOUT, ':encoding(cp932)'; # 外部への出力(標準出力)は”内部表現”からcp932に変換

my $url = "http://yahoo.co.jp/index.html";
my $response_string = decode('utf8', get($url)); # 外部から来た文字列は内部表現にdecode
#my $response_string = decode_utf8( get($url) ); # 外部からきた文字列がUTF-8の場合はこれでもよい

print $response_string;
0334nobodyさん2009/10/05(月) 23:45:50ID:???
>>333
332です。さっそくのご返答、ありがとうございます。
Perlの内部表現、encode、decodeについて、まだ詳しく理解していないので、これから勉強していきます。
サンプルで書いていただいたコード、見事に文字化けなしで動作しました。
2chに書き込むのは、生まれてはじめてだったのですけど、的確なアドバイスをいただいて感激しました。
0335nobodyさん2009/10/06(火) 16:20:44ID:o5fGVlDs
>>328
ベストは>>329の回答。

どうしてもなら
map { ${ $_ } = $arg{ $_ } } qw(a b c);
0336nobodyさん2009/10/06(火) 16:30:58ID:???
そもそもデータの扱い方が悪いんだから
そこを指摘してあげなよw
0337nobodyさん2009/10/06(火) 19:46:56ID:???
>>335
シンボリックリファレンスを使ったやり方ですよね。
それはまず最初に試したのですが、動いてくれませんでした。
no strict 'refs' を使ってもダメでした。

理想は>>329さんのやり方なのだとは思うのですが、
実際は配列の中に入っている変数が10数個ある状態ですので
どうしても冗長になってしまいます。
そこをどうにかできればと思ったのですが…。
0338nobodyさん2009/10/06(火) 20:07:37ID:???
これはうごくっしょ。
use strict;
use warnings;

my %arg = (a => 1, b => 2, c => 3);

{
no strict 'refs';
map { ${ $_ } = $arg{ $_ } } qw(a b c);
}
{
no strict 'vars';
no warnings 'once';
print "$a, $b, $c\n";
}

掟破りなコードだわな。
普通は使わないので、プログラムを練り直してください。
0339nobodyさん2009/10/07(水) 00:45:53ID:???
>>337
配列というかハッシュに入ってんだろ?
一番便利な形じゃん

そのまま使うか丸々コピーして使えば?
0340nobodyさん2009/10/07(水) 14:16:38ID:DCSJgtVa
test
0341nobodyさん2009/10/07(水) 19:56:47ID:OXEUclFZ
http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv

このファイルが開けないのですが、どーすれば良いのでしょうか。
0342nobodyさん2009/10/07(水) 22:42:55ID:4Cj4Mzn7
>>341
開けるよ?
何をどうしたいのか、試した操作は何か書いてください。
0343nobodyさん2009/10/08(木) 00:00:06ID:???
>>338,339
ありがとうございます、動きました…が、やっぱりデータの扱いに問題ありますよね。
元のプログラムでは上のソースを使って変数格納したものが
合計数百カ所くらい使われていて、なかなか修正に踏み切れなかったのですが
この機会に手を入れてみます。重ねてありがとうございました。
0344nobodyさん2009/10/08(木) 12:48:43ID:OiR61371
>>342
中身を編集したいのですが
fedora9付属しているGNOMEテキスト・エディタで開こうとして失敗します。
0345nobodyさん2009/10/08(木) 13:51:45ID:???
>>344
euc-jpで書かれているっぽいんだけど、
文字コードの認識がうまく行かないのが悪そう
perlでeuc-jpで読んで
utf-8におき替えてから編集すれば良くね?
0346nobodyさん2009/10/08(木) 15:08:29ID:???
>>344
テキストエディタかよ。
perl関係ねーじゃねーか。

お約束で一応突っ込んどく。
0347nobodyさん2009/10/08(木) 16:46:58ID:pWiOQ0nr
>>345
どうすればperl上で編集できるのでしょうか?
無知ですみません。
0348nobodyさん2009/10/08(木) 17:21:14ID:???
>>347
こんなんでどう?

-- euc2utf.pl -------
use Encode;

$ARGV[0] =~ /(.*)\.(.*?)$/;
open my $out, ">$1_utf8.$2" or die $!;
while (<>) {
Encode::from_to($_, 'euc-jp' => 'utf8');
print {$out} $_;
}
close $out;


コマンドラインより

perl euc2utf.pl keywordlist_furigana.csv

で、keywordlist_furigana_utf8.csvというファイルができる。
0349nobodyさん2009/10/08(木) 22:33:48ID:???
geditは文字コードによって開けないなんてない
文字化けするだけ
多分落とすときに壊れたか、パーミッションの問題じゃないか
0350nobodyさん2009/10/09(金) 00:04:50ID:???
いや、開けない環境もあるよ。
文字化けすら許さないらしい。
03513412009/10/10(土) 17:39:23ID:7InkIPwk
>>348
レスありがとうございます。
言われた通りにやったのです、やはり開けませんでした。
(プログラムはエラーなく実行できました。)

>>349-350
再度ダウンロードし、パーミッションも問題ないはずですが開けませんでした。
OSはfedora9です。
0352nobodyさん2009/10/10(土) 21:07:02ID:???
つーか聞く場所違うくね?
全くPerl関係なくね?

とりあえずviで開いてみたら?
0353nobodyさん2009/10/11(日) 00:10:19ID:X0n6wGB1
whileにelseって使える??
0354nobodyさん2009/10/11(日) 01:18:56ID:???
ブロックの中になら使える

while($hoge){

} else {

}

的な使い方を想定してるなら出来ない
というかどういう状況でこんな処理が必要になるのか想像もつかない
0355nobodyさん2009/10/11(日) 01:21:55ID:???
どうもです。
my %map = ( @cols => @list );

ってな感じでハッシュに一行代入するやり方があったはずなんですが、
やり方を忘れてしまいまして、本当にくだ質ですが、お答え頂けると幸いです。
0356nobodyさん2009/10/11(日) 01:28:52ID:???
my %map = map{ $cols[$_] => $list[$_]} 0..$#cols;

こんな感じ?
03573552009/10/11(日) 01:35:13ID:???
>>356
違いますね。
そんなにややこしいやり方じゃなく、もっと直感的にできるんですが。
まぁ、for使えってハナシですが。
0358nobodyさん2009/10/11(日) 01:35:58ID:???
あー1行かw

my %hash = ($cols[0], $list[0]);
$hash{$cols[1]} = $list[1];

多分このどっちかのことだろ?
03593552009/10/11(日) 01:39:42ID:???
自決しました。
スライス使うだけですた。
二行にはなりますが、以下で出来ますた。
my %map = ();
@map{@cols} = @list;
0360nobodyさん2009/10/11(日) 05:54:06ID:X0n6wGB1
正規表現でnバイト目から検索とかできませんか?
0361nobodyさん2009/10/11(日) 10:25:57ID:???
substr($str, 10)=~ /できるでしょJK/;
0362nobodyさん2009/10/11(日) 11:41:59ID:???
>>360
肯定の戻り読みを使うとか

my $ignore_bytes = 6
my $search_word = 'foo';
my $str = 'foo--foo--';
$str =~ /(?<=^.{$ignore_bytes}).*$search_word/;
0363nobodyさん2009/10/12(月) 03:34:02ID:???
>>357
可読性を考えるなら >>356 を使ったほうがいいと思いますよ。

% で宣言してるのに @ で使うとか、間違いの元だと思うんで。


「動けばいいの!」 って言うんならそれでいいですが・・・
0364nobodyさん2009/10/12(月) 07:37:11ID:???
どんだけアホだ?
356でも>>359でも間違える余地なんて無い。
>>359のスライス間違える奴は356でも間違える。
それだったら丁寧にfor使え(for修飾子では無く)
0365nobodyさん2009/10/12(月) 07:54:23ID:???
スライスを知らない奴、mapを知らない奴、forを知らない奴、ハッシュを知らない奴、配列を知らない奴・・・
底辺に配慮してたらキリが無いわな
0366nobodyさん2009/10/12(月) 10:32:01ID:???
そんな底辺があつまる2chw
03673552009/10/12(月) 17:22:45ID:???
>>363
@とか%はキーワードとして、見ないもんですよ。
どちらかというと[]なのか、{}なのかで型が決まってきますです。
そもそも、生の配列やハッシュを使うとデータ構造に制限しか生みませんです。
0368nobodyさん2009/10/12(月) 22:45:13ID:???
制限こそが重要だろ
0369nobodyさん2009/10/12(月) 23:36:14ID:???
よし、今度ハッシュを焼いてみよう。
0370nobodyさん2009/10/13(火) 00:26:07ID:???
まあでも生配列は使う頻度を減らしていこうっていう方向だからねぇ
0371nobodyさん2009/10/13(火) 10:43:38ID:???
それはお前がでしょ
0372nobodyさん2009/10/13(火) 13:35:24ID:???
生配列って意味が分からないが、C++的に解釈して、
オブジェクトにして扱えってこと?

Perlだったら、List::MoreUtilsのzip/meshで十分だと思うけどなぁ。
そこまで拘りたい場面なら、がっつりRuby使うかな。
0373nobodyさん2009/10/13(火) 17:20:52ID:???
オブジェクトにしろっていうか、
データはレファレンスで表現するのを基本にするってことでしょ
0374nobodyさん2009/10/13(火) 17:38:12ID:???
それはオブジェクトを完全にモノにしてからほざけって話だよね>perl

中途半端にやるからソースがごちゃごちゃになるのに・・・
0375nobodyさん2009/10/13(火) 20:16:59ID:???
こんなところでぐだぐだしてる暇あったら職安行けば?
0376nobodyさん2009/10/13(火) 21:45:13ID:???
職安のPCでソース書いてるので17時までなんです><
0377nobodyさん2009/10/13(火) 23:05:10ID:???
生ハッシュ使うとforで回せない。
配列に生配列は格納できない。
こっちのがよっぽど制限。
0378nobodyさん2009/10/13(火) 23:14:59ID:???
>>377
ハッシュリファレンスでforを回すとはどういう風にするのですか?
0379nobodyさん2009/10/13(火) 23:39:19ID:???
そもそも生or生じゃない配列の違いがわからん
0380nobodyさん2009/10/13(火) 23:41:11ID:???
>>367
脳内定義の「生の配列」が何を指し示すのか解らんが、
普通のARRAYの事ならば自分がスライス(>>359)で思いっ切り
使ってる。ハッシュにしても。要するに>>363への反論になってない。
何か別物を指すならそれを説明しなきゃ、伝わる訳無い。

「生ハッシュ」ってのも何だそれ?
普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'

ついでに、
>>363はこの程度の初期化で「可読性」って単語を持ち出す
のは止めといた方が良い(しかも可読性を損いがちなmapに対して)。
こっちが赤面する。
03813552009/10/13(火) 23:54:32ID:???
>>380
実際のコードではこうなってますけどね。
@{ $entity_map }{ @$col_list } = @$result_list;

生の配列/ハッシュってのは、『インタプリタが変数展開するもの』ですね。
my @arr1 = (1, 2, 3);
my @arr2 = (4, 5, 6);
my @array = ( @arr1, @arr2 );
的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
03823552009/10/14(水) 00:07:22ID:???
> 「生ハッシュ」ってのも何だそれ?
> 普通のHASHの事ならforで回せるぞ?望み通りの結果にはならんが。
> perl -Mstrict -Mwarnings -le 'my %h = 1..10 ; for ( %h ){ print $_ }'
ハッシュ自体を回すのでなく、
for my %map ( @list ) {}
これが出来ないという意味ですね。
03833722009/10/14(水) 00:43:00ID:???
>>381-382
なんだこれ。
> 的な間違いを仕様で定めて阻止する方が有意義な制限だとは思いませんか?
フラットにするのはPerlの仕様なんだから、Larryにでも提言しろよ。
アホらし。
0384nobodyさん2009/10/14(水) 00:55:09ID:???
>>383
そのLarryはすでに解決策を提示しているのだが
03853722009/10/14(水) 00:56:36ID:???
>>384
5.xで、か?
0386nobodyさん2009/10/14(水) 00:59:59ID:???
生と生じゃない配列/ハッシュの違いをくれよw
ここは超初心者用なんだぜ?

たとえば

not 生 $test = { 'a' => 1, 'b' => 2};
生 %test = ( 'a' => 1, 'b' => 2);

みたいな書き方でお願いします。
0387nobodyさん2009/10/14(水) 01:02:16ID:???
>>367

[] 配列
{} ハッシュ
() これ何?
0388nobodyさん2009/10/14(水) 01:06:04ID:???
Perlのオブジェクトは所詮、blessされたリファレンス
0389nobodyさん2009/10/14(水) 01:25:13ID:???
リファレンスに入れると関数の副作用が働かない場合があるから使えるときは普通のハッシュ使えばいいと思うよ
0390nobodyさん2009/10/14(水) 01:25:29ID:???
老害かゆとりか知らんが、言葉尻を捕まえて自分の無知晒してるだけだと気づけよ。
0391nobodyさん2009/10/14(水) 01:59:07ID:???
だから本気で知らないから解説をお願いしてるのに
じゃなきゃ 超初心者用スレ に住んでません orz
03923802009/10/14(水) 02:09:57ID:???
355氏は、次から脳内用語じゃなくきちんとperlの用語で書いてくれ。
355 perl
「生配列」 => 配列、単次元の配列、etc...
「配列」 => 多次元配列、Array of Hashes、etc...
「生ハッシュ」 => ハッシュ、etc...
「ハッシュ」 => 多次元ハッシュ、Hash of Arrays、etc...
# 355氏の意図とは違うかも知れんが。
少なくとも以下のURLで使われてる言葉の範囲内で説明してくれたら助かる。
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perldsc.html
% perldoc perldsc
そしたら、似た用語を持ち出されて混乱する事も少なくなるでしょうから。

>>381>>382に関しては、、、「超初心者」じゃなさそうだから書く。
アホかと。
後出しもたいがいにしろ。
手前のくだらん妄想に付き合わせんじゃねえよ、ボケ。
0393nobodyさん2009/10/14(水) 07:58:14ID:???
リファレンス使えってことだと思うが。
0394nobodyさん2009/10/14(水) 09:18:29ID:???
Perl5.005って、父さんそんな古いものを。
0395nobodyさん2009/10/14(水) 10:32:56ID:???
>>393
ただそれだけなんですか?


テストプログラム作りたいだけなのに、
仰々しく組みたくないから、今のスタイル
でいいや
0396nobodyさん2009/10/14(水) 14:16:17ID:???
リファレンス使うだけなのに、「仰々しく」とか。
こういう勉強を嫌う怠惰な姿勢が、
保守性の悪いコードを生むんだろうね
0397nobodyさん2009/10/14(水) 18:46:52ID:???
何自分の妄想に酔ってんの?
0398nobodyさん2009/10/14(水) 20:27:19ID:???
妄想も何も、>>392のリンク先自体がリファレンスを使ってるだろうが、
そのデータをさらにラップする必要が出てきたら、
結局リファレンスにするんだから最初からやっとけっつぅ話だ。
0399nobodyさん2009/10/14(水) 20:56:13ID:???
>こういう勉強を嫌う怠惰な姿勢が、
>保守性の悪いコードを生むんだろうね
これが妄想だって言ってんだけど…。
当ってるのかも知れんがね。
自分の心の中で思ってりゃ良い事でしょ?
0400nobodyさん2009/10/14(水) 20:59:03ID:???
@{ $entity_map }{ @$col_list } = @$result_list;
これのデータ構造とかを考えた上で保守性万全だと思うなら病院に行け。
適材適所でリファレンスは使えば良いだけだ。
0401nobodyさん2009/10/15(木) 20:28:53ID:???
適材適所には同意するが、
他人が利用する可能性が少しでもあればリファレンスかな。
正直、規模によるとしか言えんし、普段から使っておいても損でもない。

日曜プログラマや趣味グラマには不要かw
0402nobodyさん2009/10/15(木) 21:15:52ID:???
KY
0403nobodyさん2009/10/16(金) 22:02:15ID:???
>>400
ちなみにお前さんならどう書くのかね。
批判するだけだら、未就学児童にでもできるが。
0404nobodyさん2009/10/16(金) 22:50:03ID:???
こういう能無しにはraw dataとかも通じないんだろうな
■ このスレッドは過去ログ倉庫に格納されています