1 名前:nobodyさん mailto:sage [2008/02/25(月) 19:25:51 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1189939783/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
142 名前:138 [2008/03/18(火) 18:30:10 ID:yz+TlyvN] RESありがとうございますっ $hogeか$fugaに数字以外の記号が入っている場合もあり ソノ場合は0として扱いたいのですが 数字が入っていた場合は数字として扱いたいのです、、、 num $fuga int $fuga などで数字と明言する方法があったような気がするのですが 私の勘違いでしょうか???
143 名前:nobodyさん mailto:sage [2008/03/18(火) 18:35:55 ID:???] 勘違い。 っつーかデバッグして調べろよ
144 名前:nobodyさん mailto:sage [2008/03/18(火) 19:26:34 ID:???] 内容が多いハッシュの値があって、それをデータベースに格納するのに、 そのままSQL文を書くと長いので my ( @n, @q, @p ); foreach my $key ( keys %hash ) { push @n, $key; push @q, '?'; push @p, $hash{$key}; } my $sth=$dbh->prepare('INSERT INTO test('.join(',',@n).') VALUES('.join(',',@q).')'); $sth->execute(@p); という形でSQL文を構築してデータを格納しているのですが、 もう少しスマートな方法は無いでしょうか?
145 名前:nobodyさん mailto:sage [2008/03/18(火) 19:50:13 ID:???] my $sth=$dbh->prepare('INSERT INTO test('.join(',',keys %data).') VALUES('.join(',',map{'?'}(keys %data)).')'); $sth->execute(map{$data{$_}}(keys %data)); 適当にmapで記述したら、ここまで短くなりましたが、map{'?'}(keys %data)の辺りは、 もうちょっとスマートな方法がありそう…。
146 名前:nobodyさん mailto:sage [2008/03/18(火) 20:25:49 ID:???] >>145 スマートな方法より可読性を選んだら? keys %data を三回も呼ぶんだったらアレイに突っ込むだろ。 ついでに、join ',' も二回あるんだったらサブルーチンかなんかにしちまえ。<= 嘘。 sub foo { return join ',', @_ ;} ; @arr = keys %data ; my $sth=$dbh->prepare('INSERT INTO test('. &foo( @arr ) .') VALUES('. &foo( ('?') x @arr) ).')'); $sth->execute( @data{ @arr } ); てきとーに書いたから、' とか抜けてても勘弁。
147 名前:nobodyさん mailto:sage [2008/03/18(火) 21:49:40 ID:???] >>138 #!/usr/bin/perl -w use strict; use Scalar::Util qw(looks_like_number); test(@ARGV); test(map looks_like_number($_) ? $_ : 0, @ARGV); sub test { my($hoge, $fuga) = @_; print "hoge:[$hoge] fuga:[$fuga] "; $hoge += $fuga; print "result:[$hoge]\n"; } >>144 my $col = join ',', my @col = keys %hash; my $phs = join ',', ('?') x @col; my $sth = $dbh->prepare("INSERT INTO test($col) VALUES($phs)"); $sth->execute(values %hash);
148 名前:138 [2008/03/19(水) 16:21:54 ID:uoUGbd4u] >147さん RESありがとうございます。 >143さん おっしゃるとおりでした。 すいません。デバッグしてみますと整数になっていなかった訳ではなくバグでした。 下記のようなプログラムでタブ区切りのファイル内の$filename (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」) でハッシュデータで $hash{名前}->数 とやろうとして下記のようにプログラムを組んでみました。 ---------------- open(FH,"$filename"); my @data = <FH>; close(FH); my %hash = (); foreach(@data){ my @splitdata= split(/\t/); if(defined $hash{$splitdata[7]}){ print "<>$splitdata[7]no$hash{$splitdata[7]} ha mouaru<><br>"; }else{ $hash{$splitdata[7]} = 0; print "$splitdata[7] wo sengen<br>"; } } my $key; foreach $key ( keys %hash ) { print "$key<br>"; foreach(@data){ my @splitdata= split(/\t/); if($key eq $splitdata[7]){ print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>"; $hash{$key} += $splitdata[10]; print "$hash{$key} : $hash{$splitdata[7]}<br>"; } } } (続く)
149 名前:138 [2008/03/19(水) 16:23:18 ID:uoUGbd4u] (続き) ---------------- それで出力が print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>"; $hash{$key} += $splitdata[10]; print "$hash{$key} : $hash{$splitdata[7]}<br>"; の所が 0 ni 2 tumari 0 += 2 ;wo tasu 0 : 0となっていたのですが どのようにすれば ハッシュデータで $hash{名前}->数 とのハッシュデータを取得できますでしょうか? 以上 ご助力をいただけますとありがたいです。
150 名前:nobodyさん mailto:sage [2008/03/19(水) 16:44:42 ID:???] 日本語で
151 名前:nobodyさん mailto:sage [2008/03/19(水) 16:56:44 ID:???] ひどすぎワロタwww
152 名前:nobodyさん mailto:sage [2008/03/19(水) 17:13:34 ID:???] $hash{名前}->数ってこれはリファレンス的な意味じゃないよね? $hash{名前} = 数で取り出したいってこと? $splitdata[10]てなに?空じゃないの? $hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?
153 名前:nobodyさん mailto:sage [2008/03/19(水) 17:20:14 ID:???] > (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」) $splitdata[0] が「名前」 $splitdata[7] が「数」 に見える。 コードは $splitdata[7] が「名前」 $splitdata[10] が「数」 っぽいことになってるし、いつのまにか $splitdata[10] に 2 が入ってるし、よくわかんない。 (exists $hash{$splitdata[0]}) かどうか調べて、なかったら用意して $hash{$splitdata[0] += $splitdata[7] したいんじゃないのかな。
154 名前:153 mailto:sage [2008/03/19(水) 17:21:25 ID:???] 最後の行 $hash{
155 名前:153 mailto:sage [2008/03/19(水) 17:23:29 ID:???] すみません。} を打とうとしたら shift + enter を押して鬱。 $hash{$splitdata[0]} の } が抜けてました。
156 名前:nobodyさん mailto:sage [2008/03/19(水) 17:28:37 ID:???] map { $hash->{$_->[0]} += $_->[7]; } map { chomp; [split(/\t/)]; } @data;
157 名前:nobodyさん mailto:sage [2008/03/19(水) 23:15:18 ID:???] このスレが相応しいかわかりませんが質問させてください。 perl 5.8.4 mysql 4.1.11 OS debian 上記の環境でお勉強目的で BBS を作成しています。 データ自体は utf8 で格納出来ているはずですが、 perl 取得した結果を print した 際に文字化けが発生してしまいます。何処を注意すべきでしょうか? # やってる内容をかいつまんで記入します use DBI;use utf8;use Encode; binmode STDIN, ":encoding(utf8)"; binmode STDOUT, ":encoding(utf8)"; $db = DBI->connect("DBI:mysql:database:localhost:$port", "hoge", "hoge"); $db->prepare("set character set utf8"); あとはセレクトして print しているだけ # DB の中身は dump したファイルが utf8 で出力されていたのでデータは utf8 のはずです
158 名前:nobodyさん mailto:sage [2008/03/19(水) 23:41:08 ID:???] >>157 OSの設定はutf-8か、日本語が表示できるシェルを使ってるか
159 名前:nobodyさん mailto:sage [2008/03/19(水) 23:45:37 ID:???] BBSなんだからHTML吐いてるんじゃないの? それでメタタグの文字コード宣言が違うとか
160 名前:157 mailto:sage [2008/03/20(木) 12:29:10 ID:???] おはようございます。 apache を使ってブラウザ上に表示させてます。 メタタグには一応 utf-8 って記入してます。 ブラウザ側の文字コードも utf-8 になってました
161 名前:nobodyさん mailto:sage [2008/03/20(木) 12:38:21 ID:???] BOM付いてる希ガス
162 名前:nobodyさん mailto:sage [2008/03/20(木) 13:03:57 ID:???] for ($i=0; $i<6; $i++) { for ($j=0+$i*10; $j<10+$i*10; $j++) { $box[$i][$j] = $j; }; }; print "$box[0][0]\n"; print "$box[0][1]\n"; print "$box[0][2]\n"; print "$box[0][3]\n"; print "$box[0][4]\n"; print "$box[0][5]\n"; print "$box[0][6]\n"; print "$box[0][7]\n"; print "$box[0][8]\n"; print "$box[0][9]\n"; print "$box[1][0]\n"; print "$box[1][1]\n"; print "$box[1][2]\n"; print "$box[1][3]\n"; print "$box[1][4]\n"; print "$box[1][5]\n"; print "$box[1][6]\n"; print "$box[1][7]\n"; print "$box[1][8]\n"; print "$box[1][9]\n"; 上記のプログラムを実行すると、$box[1][x]が表示されないのはなぜ?
163 名前:nobodyさん mailto:sage [2008/03/20(木) 13:33:56 ID:???] print "$box[1][0+$i*10]\n";だから。
164 名前:nobodyさん mailto:sage [2008/03/20(木) 13:41:13 ID:???] $box[$i][$j] = $j; の行の次に print "[$i][$j]\n"; 入れて表示してみ
165 名前:nobodyさん mailto:sage [2008/03/20(木) 13:42:25 ID:???] $box[$i][$j] = $i * 10 + $j; 期待する動作はこれかな?
166 名前:nobodyさん mailto:sage [2008/03/20(木) 13:43:46 ID:???] >>163 俺には理解不能だ もうちと、噛み砕いておしえてくれ
167 名前:162 mailto:sage [2008/03/20(木) 13:44:57 ID:???] みなさん、レスありがと。 今、飯食ってるから 終わったら試してみる。
168 名前:nobodyさん mailto:sage [2008/03/20(木) 13:54:36 ID:???] >>164 意図した動きになってる。 iもjもちゃんと入れ子になって ループしている
169 名前:nobodyさん mailto:sage [2008/03/20(木) 13:56:38 ID:???] >>164 あ!ごめんなさい ちと、おかしい
170 名前:nobodyさん mailto:sage [2008/03/20(木) 14:02:32 ID:???] >>165 そうでした。
171 名前:162 mailto:sage [2008/03/20(木) 14:03:22 ID:???] 皆様、ありがとうございます。 解決できました。 PG久しぶりなんで、 頭が退化してたようです。
172 名前:nobodyさん mailto:sage [2008/03/20(木) 14:11:42 ID:???] 10 x 10 の箱に連番を入れたかっただけだけど、配列のインクリメントでちとボケてただけですね まぁ俺もたまに似たようなミスするのであまりコケにできないwww
173 名前:nobodyさん mailto:sage [2008/03/20(木) 15:57:38 ID:???] またお願いします。 見た目の桁数を8桁に揃えたいんです。 先頭は空白にしたいのですが、下記でうまくいきません。 $len = 8 - length($num); $head = " " x $len; $txt = $head.$num; 2行目を $head = "a" x $len; とすれば、先頭に "a"は入って、桁が揃うんです。 それとも連続空白を表す記号みたいな物は あるのでしょうか?
174 名前:nobodyさん mailto:sage [2008/03/20(木) 16:03:28 ID:???] webブラウザが半角スペースをつぶしちゃうからとかじゃなくて?
175 名前:nobodyさん mailto:sage [2008/03/20(木) 16:12:49 ID:???] >>174 げ!、ソースを見たらちゃんと空白が入ってました。 ブラウザで表示すると空白がなくなっちゃう。。。 これはなんでですか?
176 名前:nobodyさん mailto:sage [2008/03/20(木) 16:43:28 ID:???] ブラウザの仕様
177 名前:nobodyさん mailto:sage [2008/03/20(木) 17:00:56 ID:???] ブラウザで桁をそろえたいなら、表示する部分のフォントを font-family: monospace; にしたうえで空白を にすればいいです。
178 名前:nobodyさん [2008/03/20(木) 20:32:02 ID:cqY9pHpE] <pre></pre>
179 名前:162 mailto:sage [2008/03/20(木) 22:32:36 ID:???] >>178 それは、クライアントの読み込みが遅くなるので あきらめました。 にしました。
180 名前:162 mailto:sage [2008/03/20(木) 22:33:29 ID:???] & n b s p ; に、しました。
181 名前:nobodyさん mailto:sage [2008/03/20(木) 23:06:14 ID:???] 「&nbsp;にしました」と書けばok
182 名前:nobodyさん mailto:sage [2008/03/20(木) 23:17:39 ID:???] >>181 むぅ、また、難しいことを言うな。 明日、調べます。
183 名前:nobodyさん mailto:sage [2008/03/20(木) 23:33:13 ID:???] >>182 いやいや、難しい話でなく。>>181 が言ってるのは 「&nbsp;にしました」と入力して投稿すれば 「 にしました」と表示されるからスペース不要ってだけの話だと思うよ。 # でも確か専ブラによって表示が違ったはず。<エンティティ方面
184 名前:nobodyさん mailto:sage [2008/03/21(金) 10:02:10 ID:???] nbsp;でも詰まるよ HTMLでalign=rightのほうがいいんじゃない?
185 名前:nobodyさん mailto:sage [2008/03/21(金) 10:37:17 ID:???] それはプロポーショナルたからな 桁そろえるのにHTMLのブロック要素を使わなかったり 固定幅フォントを使わないのはバカだゆん
186 名前:157 mailto:sage [2008/03/21(金) 11:32:07 ID:???] >>157 です 自己解決決しました。 SQL を実行する前に SET NAMES utf8 を実行する必要があったみたいです。 一旦 SET NAMES utf8 を実行した後で select/insert/etc... を実行しないと 化けてしまうようです。 ナゼ化けるのかは理解できていませんが・・・。 # たぶん utf-8 以外で MySQL から出力しようとして化けてしまうとは思いますが理解できていません。
187 名前:nobodyさん mailto:sage [2008/03/21(金) 13:27:45 ID:???] ふと>>144 の解答で疑問に思ったのですが… ハッシュ値の並び方が呼び出しのタイミング等で 一致しないのは知ってますが、keys %hash と values %hash の 並び方って必ず組み合わせが一致するのでしょうか?
188 名前:nobodyさん mailto:sage [2008/03/21(金) 13:31:00 ID:???] keys使ってからをvaluesを使うまでにハッシュの内容を変えなかった場合一致するよ
189 名前:nobodyさん mailto:sage [2008/03/21(金) 18:55:25 ID:???] どなたか、10進数を26進数(使える文字はAからZ)に変換するサブルーチンを教えてください
190 名前:nobodyさん mailto:sage [2008/03/21(金) 21:10:27 ID:???] >>189 my $Number10 = 1234; # 10進数 # 2進数 #my @digits = ('0','1'); # 16進数 #my @digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); # 8進数 #my @digits = ('0','1','2','3','4','5','6','7','8'); # 26進数 my @digits = ('A'..'Z'); print &to_base($Number10,\@digits); sub to_base { my $num = shift; my $digits = shift; my $dignum = @{$digits}; my $result = ''; while ($num > 0) { substr($result,0,0) = $$digits[ $num % $dignum ]; $num = int ($num / $dignum); } return length $result ? $result : $$digits[0]; }
191 名前:nobodyさん mailto:sage [2008/03/21(金) 21:33:13 ID:???] >>189 sub conv($){ my $alpha = 'A' ; $alpha ++ for 1 .. $_[0] ; return $alpha ; } printf "%d\t%s\n", $_, conv $_ for 0 .. 200 ;
192 名前:nobodyさん mailto:sage [2008/03/21(金) 21:53:29 ID:???] 191は取り消し
193 名前:nobodyさん mailto:sage [2008/03/21(金) 23:12:27 ID:???] my $alpha = q{A} ; my %table2 = map { $_, $_ } 0..1 ; my %table8 = map { $_, $_ } 0..7 ; my %table16 = ( ( map {$_, $_ } 0..9 ), map{ $_, $alpha ++ } 10..15 ); $alpha = q{A} ; my %table26 = map{ $_, $alpha ++ } 0 .. 25 ; sub trans($$){ my %table = %{ shift @_ } ; my $num = shift ; my $int = keys %table ; my $res = q{} ; until( $num / $int <1){ $res = $table{ $num % $int } . $res ; $num = int ( $num / $int) ; } return $table{$num}. $res ; } for ( 0 .. 1000 ){ print $_ . qq{\t} . ( trans \%table26, $_ ) . qq{\t} . ( trans \%table2, $_ ) . qq{\t} . ( sprintf "%b", $_ ) . qq{\t} . ( trans \%table8, $_ ) . qq{\t} . ( sprintf "%o", $_ ) . qq{\t} . ( trans \%table16, $_ ) . qq{\t} . ( sprintf "%x", $_ ) . qq{\n} ; }
194 名前:nobodyさん mailto:sage [2008/03/22(土) 07:21:59 ID:???] >>190-193 ありがとうございます。 さっぱり分かりませんが、 使ってみます。
195 名前:nobodyさん mailto:sage [2008/03/22(土) 07:40:27 ID:???] >>190 教えて頂いて申し訳ないですが、 Zの次がBAになってしまいます。 Zの次はAAにしたいのです。
196 名前:nobodyさん mailto:sage [2008/03/22(土) 08:02:49 ID:???] >>195 それだったら191使えば?
197 名前:nobodyさん mailto:sage [2008/03/22(土) 08:39:40 ID:???] >>196 >>191 は取り消しって書いてあるから、 試してなかったんだけど、 試したら、うまくいってると思う。 なんで、取り消したんだろう???
198 名前:nobodyさん mailto:sage [2008/03/22(土) 08:46:28 ID:???] >>197 Excel式の26進数もどきだから。
199 名前:nobodyさん mailto:sage [2008/03/22(土) 08:53:15 ID:???] >>198 よく分からんが、ありがと。 しかし、>>191 の処理速度は遅いね。
200 名前:nobodyさん mailto:sage [2008/03/22(土) 09:14:56 ID:???] >>193 は、なんかエラーが出て動かないorz
201 名前:nobodyさん mailto:sage [2008/03/22(土) 09:21:39 ID:???] >>190 をなんとか改造できないだろうか。 ちと、考えてみる。 でも、自分には無理な気がする。
202 名前:nobodyさん mailto:sage [2008/03/22(土) 09:22:10 ID:???] >>191 は、26進数じゃない。使うな。 10進数676は、26進数では、 676/26 = 26 余り0 26/26 = 1 余り0 で、1 0 0(BAAが正しい)が、 >>191 だとZAになる。 >>200 インデントの為の全角スペースを除け。
203 名前:nobodyさん mailto:sage [2008/03/22(土) 09:38:25 ID:???] >>202 ありがと。 >>191 は、遅い理由も含めて、使用しないことにする。 >>191 さん、申し訳ない。
204 名前:nobodyさん mailto:sage [2008/03/22(土) 09:44:17 ID:???] >>193 も zの次がbaになるorz
205 名前:nobodyさん mailto:sage [2008/03/22(土) 09:45:28 ID:???] >>203 202=191=193=俺なので気にするな。
206 名前:nobodyさん mailto:sage [2008/03/22(土) 10:17:00 ID:???] Math::BaseCalcモジュールでも使えば良いんでないか?
207 名前:nobodyさん mailto:sage [2008/03/22(土) 10:39:29 ID:???] >>206 まず、インストールのいかたが分からないので、 そこから、調べてみる
208 名前:nobodyさん mailto:sage [2008/03/22(土) 10:39:45 ID:???] インストールのしかた
209 名前:nobodyさん mailto:sage [2008/03/22(土) 10:54:33 ID:???] ppm install Math-BaseCalc
210 名前:nobodyさん mailto:sage [2008/03/22(土) 10:57:42 ID:???] インストールできました。 $calc = new Math::BaseCalc(digits => ['a'..'z']); $ans = $calc->to_base($number); これもzの次にbaが出るorz
211 名前:nobodyさん mailto:sage [2008/03/22(土) 11:22:42 ID:???] 当り前だろ、A=0 B=0扱いなんだから おまいがやりたい事は26進とは言わない
212 名前:nobodyさん mailto:sage [2008/03/22(土) 11:23:35 ID:???] B=1だ orz
213 名前:nobodyさん mailto:sage [2008/03/22(土) 11:32:56 ID:???] うぅーん、そうなると 私が意図したものは どう書けばいいのだろうか???
214 名前:nobodyさん mailto:sage [2008/03/22(土) 12:54:31 ID:???] 出来た!実に単純だった。 my @digits = ('A'..'Z'); print &to_base($Number10,\@digits); sub to_base { my $num = shift; my $digits = shift; my $dignum = @{$digits}; my $result = ''; while ($num > 0) { substr($result,0,0) = $$digits[ $num % $dignum ]; $num = int ($num / $dignum) - 1; } return length $result ? $result : $$digits[0]; }
215 名前:nobodyさん mailto:sage [2008/03/22(土) 13:06:15 ID:???] 間違えた、こうだ。 my @digits = ('A'..'Z'); print &to_base($Number10,\@digits); sub to_base { my $num = shift; my $digits = shift; my $dignum = @{$digits}; my $result = ''; while ($num >= 0) { substr($result,0,0) = $$digits[ $num % $dignum ]; $num = int ($num / $dignum) - 1; } return length $result ? $result : $$digits[0]; }
216 名前:nobodyさん mailto:sage [2008/03/22(土) 14:55:10 ID:???] ブルートフォースアタックに使えそうなコードだなw
217 名前:138 [2008/03/24(月) 22:18:54 ID:wHKnZ0l2] お世話になっております。 スイマセン。色々試しましたがヤハリ分からないのでコチラに書き込みをさせていただきます。 「名前\t数\t」というデータ(@arrangeData)から $hash{名前}=合計数とのhashデータを作成したいのです。 # データを宣言 foreach(@arrangeData){ my @splitdata = split(/\t/); if(defined $hash{$splitdata[0]}){ }else{ $hash{$splitdata[0]} = 0; } } my $key; print "取得した数を数える。<br>"; # 取得した数を合計する。 foreach(@arrangeData){ my @splitdata= split(/\t/); foreach $key ( keys %hash ) { if($key eq $splitdata[0]){ print "$hash{ $key } ni $splitdata[1] tumari $hash{$key} += $splitdata[1];wo tasu<br>"; $hash{$key} += $splitdata[1]; print "$key : $hash{$key}<br>"; } } } とのプログラムでは何故か $hash{$key} += $splitdata[1]; print "$key : $hash{$key}<br>"; が0で数値が入りません。 どうしてでしょうか?
218 名前:nobodyさん mailto:sage [2008/03/24(月) 22:49:38 ID:???] レスあっただろ
219 名前:nobodyさん mailto:sage [2008/03/24(月) 22:52:29 ID:???] >>138 #!/usr/bin/perl -w use strict; # use Scalar::Util qw(looks_like_number); sub looks_like_number { $_[0] =~ /([0-9]+)/ ? $1 : 0 } my @arrangeData = ( "name1\t1\t", "name2\t2\t", "name3\t\t", "name4\t4\t", "name1\t10\t", "name2\t20\t", "name3\t\t", "name4\t40\t", ); my %hash; for (@arrangeData) { my($name, $num) = split /\t/; $hash{$name} += looks_like_number($num) ? $num : 0; } print "key:[$_] value:[$hash{$_}]\n" for sort keys %hash;
220 名前:nobodyさん mailto:sage [2008/03/24(月) 23:29:25 ID:???] >>219 その @arrangeData を >>217 のコードに食わせても name1 : 11 name2 : 22 name3 : 0 name4 : 44 になるんよね。"name3\tぱ\t" にしたりしても。 データのフォーマットが本人の説明と違うように思う。 という指摘が前回もあったような。
221 名前:nobodyさん mailto:sage [2008/03/26(水) 00:57:12 ID:???] 質問です。ある文字列の集合を集計して出現頻度の高い順に取り出すため、 対象の集合をそのままハッシュのキーにして値を++したんですが、 ハッシュはソートできませんよね。配列を使うしかないでしょうか。
222 名前:nobodyさん mailto:sage [2008/03/26(水) 01:00:59 ID:???] sort { $hash{$b} <=> $hash{$a} } keys %hash;
223 名前:nobodyさん mailto:sage [2008/03/26(水) 01:01:47 ID:???] >>221 質問が漠然とし過ぎてるんで、この辺一通り読んでから来て。 www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html perldoc.jp/docs/perl/5.8.8/perldsc.pod
224 名前:nobodyさん mailto:sage [2008/03/26(水) 01:05:19 ID:???] >>222 さんのでわかりました! >>223 さんのも読んでおきます! どうもでした!!
225 名前:nobodyさん [2008/03/26(水) 09:29:51 ID:LilkylgS] CGI.pmを使ってアップロードされたファイルの途中まで読んで そこで終わりにしたい場合はどうしたらいいでしょうか? どうも全部読むか、失敗かの選択しかないみたいなんですが。。
226 名前:nobodyさん mailto:sage [2008/03/26(水) 14:32:04 ID:???] そんな需要は稀なんだろ 一旦保存してから読み直せば?
227 名前:nobodyさん mailto:sage [2008/03/26(水) 14:47:06 ID:???] >>225 httpd が受け取る/受け取らないという話でなく、 プログラム中の処理の流れでという意味なら perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod の「ファイル・アップロード・フィールドの作成」の項
228 名前:nobodyさん [2008/03/26(水) 22:35:17 ID:OE9DSfjk] しつもん 定数なんかを別ファイルに置いてそこから取得したい。 ---const.pl--- my $x="あいうえお"; 1; ---main.cgi---(ヘッダとかは略) use strict; require "./const.pl"; print $x; とするとGlobal symbol "$x" requires explicit package nameという $xが定義されていませんエラーになります。 use strict外すと$xは空白です。 q.hatena.ne.jp/1190815879 とかを見るとどう見てもこれで正しいようにしか思えないのですが何故? 他にこんなところで迷ってる人居ないから環境の問題なんだろうか? CoLinux,perl5.8.6
229 名前:nobodyさん mailto:sage [2008/03/26(水) 22:45:43 ID:???] 同じ変数でも名前空間が異なれば別物
230 名前:nobodyさん mailto:sage [2008/03/26(水) 22:57:38 ID:???] >>228 <q cite="perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_my_EXPR_my "> my はリストアップされた変数を、囲っているブロック、ファイル、eval の中で ローカルな (レキシカルな) ものにします。 </q> www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Perl_Modules
231 名前:nobodyさん mailto:sage [2008/03/26(水) 23:12:52 ID:???] my と use strict を取っ払ってみると print されたり。 変数の局所化とか strict とは無縁になるけど。 はてなでやり取りしてる人らはそうしてるんじゃないかな。
232 名前:nobodyさん mailto:sage [2008/03/27(木) 01:07:20 ID:???] local
233 名前:nobodyさん [2008/03/27(木) 01:23:34 ID:R/qLdwoI] >>228 hoge.pm package hoge; sub kaze_hiita{ "hayaku neru" } our $x = 1; 1; foo.pl use hoge; print hoge::kaze_hiita; -> 早く寝る print $hoge::x; -> 1 $hoge::x = 10; print $hoge::x; -> 10 関数のときのみ::じゃなくて->が使えるんだぜ。 あと関数の尻尾には();って書いてあると俺はうれしい。 ハッシュで渡すとさらにうれしい。 あと、そゆのがコンフィグを一杯つかうなら 普通に Auto-Config使うべし。 memo.majide.com/index.php?%A1%DAPerl%A1%DBConfig-Auto%A4%CB%A4%E8%A4%EB%C0%DF%C4%EA%A5%D5%A5%A1%A5%A4%A5%EB%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF 当然だがファイル間は文字コードは統一しとけよ それでしんだひとをみたことがあります。>俺自身
234 名前:nobodyさん mailto:sage [2008/03/27(木) 10:30:16 ID:???] >>233 説明で「 -> 1」とかを使ったら混乱するだろjk
235 名前:nobodyさん mailto:sage [2008/03/27(木) 12:35:04 ID:???] 正直すまんかった 234が責任を持って書き換えます。おながい。
236 名前:nobodyさん mailto:sage [2008/03/27(木) 12:36:10 ID:???] >>228 こうするのさ。 ---const.pl--- $x="あいうえお"; 1; ---main.cgi--- use strict; our $x; require "./const.pl"; print $x;
237 名前:nobodyさん mailto:sage [2008/03/27(木) 16:59:46 ID:???] our wwwwwwwwwwwwwwwwwwwwwwwwww
238 名前:nobodyさん mailto:sage [2008/03/27(木) 19:04:51 ID:???] ○|_|| ̄ wwwwwwwwwwwwwww
239 名前:nobodyさん mailto:sage [2008/03/27(木) 22:17:48 ID:???] oL/
240 名前:228 [2008/03/27(木) 23:49:16 ID:OO8NUyXN] >>229-236 さっぱりわからんがサンクス。調べてみる iniファイルやPHPみたいに簡単に取得できる方法はないのかのう・・・
241 名前:nobodyさん mailto:sage [2008/03/27(木) 23:56:27 ID:???] >iniファイルやPHPみたいに簡単に取得できる方法 だからモジュール紹介されてるやんけwww
242 名前:nobodyさん mailto:sage [2008/03/28(金) 00:17:56 ID:???] ワロタ