1 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 12:22:12 ] "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 ● 2008/09/21 現在の最新版(安定版): 5.10.0 ● 2008/09/21 現在の開発版: 5.9.5 ▼ 前スレ Perlについての質問箱 37箱目 pc11.2ch.net/test/read.cgi/tech/1218449440/ リンク集は>>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは>>5-6 あたり
245 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 12:50:50 ] ……難しいorz 適当に入門サイト眺めただけだとやっぱり駄目ですね、今度らくだ本買ってじっくり読むことにします
246 名前:質問 [2008/10/19(日) 16:56:31 ] ファイルに書き込まれている特定の文字列(ABC数字)を抽出するにあたってよい方法はありますか? ・取得したい文字列の例は、ABC+数字で構成される たとえばABC11やABC2543など ・ファイルによっては行数が異なる。 ・各行に取得したい文字列は0個以上ある。 ・各行で、取得したい文字列が位置する場所はさまざま。(先頭にあったり、途中にあったり、)
247 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 17:00:19 ] >>245 本も良いがまずは perldoc に当たる習慣を付けた方がいい。 メジャーなドキュメントなら和訳も web を探せばある。 ttp://perldoc.jp/docs/ ttp://fleur.hio.jp/perldoc/ ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
248 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 17:10:30 ] >>246 ふつうに1行ずつ読んでパターンマッチして切り出していけばいいだけ。
249 名前:質問 [2008/10/19(日) 17:20:17 ] >>248 各行に0〜数個(決まりはないけど最大10程度)あるので・・ if($_=~/ABC(\d+))/) なら1つは取得できても、その他の文字列をどうやって取得すればいいのか・・ ファイルの例) マツダ スバル ABC111 ABC23 トヨタ 日産 本田 ABC2222 ↑ここからABCxxxの文字列だけ抽出したい
250 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 17:26:11 ] >>249 マニュアル見れ
251 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 17:27:06 ] >>249 必要な数だけパターンマッチして切り出していけばいいだけ。
252 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 18:32:45 ] マニュアル読まないヤツ大杉 >>241 >foreach %hoge (@fuga) こんな無茶な構文あり得ないだろ >>249 パターンマッチのオプションを調べれ
253 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:46:49 ] >>249 # 一行ヒント野郎 perl -nle "$, = ' '; print $., /ABC\d+/g" < ファイル名
254 名前:デフォルトの名無しさん [2008/10/21(火) 23:09:08 ] いくつか教えてください。 Perlでブログ(RSSつき)みたいな機能って作れますか? あと家計簿なんかも作れますか? 今勉強中なんですが、目標が無いと挫折しそうなんです(^^;)
255 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:10:53 ] >>254 おまえならやれる。
256 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:29:51 ] Perl単体じゃあ家計簿は無理じゃない? Perl/Tk使うのかな。
257 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:56:14 ] >>256 っ[Web]
258 名前:デフォルトの名無しさん [2008/10/22(水) 00:32:22 ] PerlMagickを使って画像を編集したいのですが、 $image_dataに画像データが入っていて、それを読み込み/編集/書き込みたい場合はどうやったらいいのでしょうか? $image->Read($image_data); $image->Flip; $image->Write($image_data); のようなことです。
259 名前:258 mailto:sage [2008/10/22(水) 00:53:16 ] ↓で出来ました。スレ汚しすいませんでした。 my $image = Image::Magick->new(magick=>'gif'); $image->BlobToImage($image_data); $image->Flip(); $image_data = $image->ImageToBlob();
260 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:06:56 ] 家計簿なんてExcelでいいじゃん
261 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:28:09 ] >>256 > Perl単体じゃあ家計簿は無理じゃない? 確かにそうだな。まともなシェルが必要だ。
262 名前:デフォルトの名無しさん [2008/10/23(木) 01:44:57 ] >>260 俺も最初そう思ったんだが、Excelは結局馬鹿だし、Excel用アドイン作ってる連中も馬鹿だから以下のようにした。 ・入力はExcel ・Perl+Spreadsheet::ParseExceでウハウハ ・Perlで計算 ・Perl+LaTeX系モジュールで帳票自動生成&改ページ自動編集&印刷 これで8年くらい確定申告の提出書類を作成してる。 いまだに国税庁のマルサは来ない。 まー奴らは俺みたいな貧乏人はスルーしてるだけだがw
263 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 20:36:56 ] www.google.com/trends?q=ruby%2Cperl%2Cpython&ctab=0&geo=all&date=all&sort=0 pythonにも負けてる(藁
264 名前:デフォルトの名無しさん [2008/10/24(金) 14:43:04 ] PerlでCのプリプロセッサのように#ifdefでコンパイルするコードを切り替えたりとかってできませんか?
265 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 14:50:59 ] >>264 できる
266 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 14:58:18 ] >>264 つ-Pオプション でもいろいろ問題あるから使わないほうがいいよ。 最終的に何をしたいのかわからないが、たいてい 使わないでできるもっといい方法がある。
267 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:33:04 ] perlでアパッチのアクセスログを振り分けるってできる?
268 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:35:36 ] きみの能力しだい。
269 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:38:16 ] >>267 もちろんできる。できない理由はない。
270 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:45:05 ] おまえらにやらせようと思ったんだけど、コード書く?
271 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:24:17 ] >>270 そういうときは、報酬も書いておくと話が早く進むぞ。
272 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:59:01 ] じゃあ1円
273 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 07:03:27 ] 進まねぇよ
274 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:56:52 ] Perlで線形リストのようなデータの持ち方をしたいのですが、 どうすればいいでしょうか? a->b,c a->b->d,e a->c->f,g のような感じです
275 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:02:27 ] リファレンス使えばいいのでは?
276 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:17:22 ] あるいは古式ゆかしく配列を使うか
277 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:40:17 ] UNIXマシンからとある機器arielに対してtelnetセッション をはりっぱにし、arielから吐かれるメッセージをローカル のディスクにロギングしたいとです。。。 arielの仕様では、無通信時間5分でtimeoutになるので 5分毎に"\n"を送信しようと思います。 自分の頭では以下の様に、whileループでarielからのデータ を待ち続けるロジックしか思いつかず、これでは5分毎の "\n"送信をどうして行えばよいのか解りませんとです。 エロい方、なんとか教えてください。。。 open (OUTLOG,">>./ariel.log"); $socket = IO::Socket::INET->new( PeerAddr => 'ariel', PeerPort => '23', Proto => 'tcp', ); if ( ! $socket ){ die } while(1){ $buf = <$socket>; print OUTLOG $buf\n"; }
278 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:08:28 ] >>277 とりあえずNet::Telnet使えば?
279 名前: ◆TWARamEjuA mailto:sage [2008/10/25(土) 23:10:30 ] cronで5分ごとに\nを送信してあげる別プロセスを作っておく。
280 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:49:42 ] レスあんがあちょです >>278 Net::telnetは @result = $telnet->cmd("ls -l"); の様な使用例しか無いので、>>277 のケースではどうかなーって思って >>279 別プロセスでなく、同一セッション中で"\n"送らないとダメな気がします って、んん?別プロから何かシグナルをこのプロセスに対して5分間隔 送ればいいのかぁーー!? そんなのできるんかな、調べてみよう
281 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:56:55 ] >>280 シグナルハンドリングを知っているなら、alarmで起こせばいいだろ。
282 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 00:29:26 ] >>281 おおっ!何と言うことでしょう。 なんだか出来そうな予感がしてまいりました。 月曜に会社行くのが楽しみになってきたw ヒントあんがちょ。多謝です。 こんなカンジかな? 略〜 $SIG{ALRM} = \&timeout; # timeout時の¥に実行する関数 alarm 280; # 5分=300秒より小さい値でアラーム while(1){ $buf = <$socket>; print OUTLOG $buf\n"; } sub timeout { print <$socket> "\n"; # 待望の"\n"送信!! alarm 280; # アラーム再設定 }
283 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:29:24 ] 手元のIMAP鯖からGMailにメールを引っ越すスクリプトを書いてます。 Mail::IMAPClientベースで書いていたのですが、 $from->migrate($to, "ALL", "OUTBOX") or die "Could not migrate: $@ \n"; この行で手元サーバからGMailへメールを移行しようとしても、移行できていないようです。 $from は 手元サーバ, $to はGMailです。GMailへの接続login自体はうまくいっているようです。 OUTBOXラベルはGMail側で作って、IMAPから見えるように設定済みです。 アドバイスいただけますでしょうか?
284 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:12:50 ] >>283 自己解決。migrateを使うのを諦めて、appendとfetchで処理しました。 お騒がせスマソ。
285 名前:デフォルトの名無しさん [2008/10/26(日) 17:43:20 ] 通常、文字列の頭から適用される正規表現を後ろから見る方法はないでしょうか? 例えば、以下のように行った場合、 --------------------- my $str = 'a b c d'; $str =~ s/ //; --------------------- a直後のスペースが消えますが、cの後ろのスペースを消すような正規表現は出来ないでしょうか? abcdといった文字列は可変です。 事前に文字列を反転させるしか思い浮かばないのですが他に方法はあるのでしょうか? 宜しくお願いします。
286 名前:デフォルトの名無しさん [2008/10/26(日) 17:45:23 ] $str =~ s/(.*) /\1/;
287 名前:デフォルトの名無しさん [2008/10/26(日) 20:37:58 ] >>286 ありがとうございます!!
288 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:12:37 ] Perl のオブジェクト指向がなんだか無理矢理って感じで、 直感的じゃなくて困っています。Pythonにしとけばよかた。
289 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:30:10 ] >>288 うん、とっととPerlのことを忘れてPythonに移れ。
290 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:37:36 ] おれなら、 $str=~/ ([^ ]*?)$/$1/; どっちでもいいんだけど、>>286 と比較したら どっちの効率がいいんだろう?
291 名前:デフォルトの名無しさん [2008/10/27(月) 16:00:31 ] A.cgiにAformからアクセスしたときと、Bformからアクセスしたときで処理内容を変えるようなプログラムにするにはどうしたらいいですか? Aから来たときはロケーション無し、Bからなら有り のような感じにしたいのですが
292 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:06:30 ] リファラー見るとかhiddenで何か持たせるとかボタン名変えるとか
293 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:28:05 ] >>291 次のどっちかで区別できる。 環境変数HTTP_REFERER INPUT(TYPE=HIDDEN)要素 でもこれ、Perlの質問じゃないのでスレ違い。 Web系のとこにいけ。
294 名前:デフォルトの名無しさん [2008/10/27(月) 17:06:45 ] >>292-293 ありがとう、試してみます そして、移動してログよんできます ごめん
295 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:05:58 ] $str =~ s/ (?=[^ ]*$)//; とか
296 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 09:09:50 ] >>295 先読みアサーションか。そういえばあったなー。 新しいせいか慣れないせいか、オレはどうしても忘れがち。
297 名前:デフォルトの名無しさん [2008/10/28(火) 16:53:15 ] 質問です。 クラスA クラスB それぞれのオブジェクト指向モジュールがあったとします。 なかでの処理には変数が英数をチェックしたり文字数チェックしたりでエラーを だすようにしるとします。 で、問題は英数や文字数をチェックするルーチンはどう実装するのが理想でしょうか? 簡単なルーチンだからそれぞれのクラスにサブルーチンとして最後の行にでも書いておけ! っていうことでもいいでしょうか?
298 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:56:07 ] 日本語で
299 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:45:57 ] >>297 fleur.hio.jp/perldoc/mix/pod/perlboot.ja.html perldoc.jp/docs/perl/5.8.8/perlmod.pod perldoc.jp/docs/perl/5.10.0/perltoot.pod >>2
300 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:19:11 ] Tripletailを使用しています。 下記のように前のページからPOSTデータを取得してTemplateに書き出したいのですが、うまく行きません。 どう修正すればよいでしょうか? #! /usr/bin/perl use strict; use warnings; use Tripletail qw(/dev/null); use CGI; $TL->startCgi( -main => \&main, ); sub main { my $t = $TL->newTemplate('template.html'); my $cgi = CGI::new(); #前ページからPOSTデータの取得 $a = $cgi->param('a'); $b = $cgi->param('b'); $t->expand( STR => $a, NUM => $b, ); $t->flush; }
301 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:39:13 ] TripletaiLは使ったことないが、「うまく行きません」とやらの詳細を書くべきだな。
302 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:45:21 ] >>301 ああ、ごめんなさい。 通常、Tripletailを使用せずにPOSTデータを取得する場合、 use CGI; $cgi = CGI::new(); $data1 = $cgi->param('p_data1'); これで取得はできますが、 上記の sub mainの中で取得しようとすると、 取得できないようです。 まだわかりにくい説明かもしれませんが、お願いします。
303 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 00:40:51 ] webprog池
304 名前:デフォルトの名無しさん [2008/10/29(水) 01:18:30 ] >>299 ありがとうございました。そのものずばりの参考ページのようです。 がんばって吸収したいと思います。
305 名前:デフォルトの名無しさん [2008/10/29(水) 02:18:09 ] >>304 > ありがとうございました。そのものずばりの参考ページのようです。 Perlの添付ドキュメントだけどな。おまえのPCにも入っているはず。
306 名前:デフォルトの名無しさん [2008/10/29(水) 17:52:59 ] use strict しているコードで $a $b を未宣言で使おうとしてもエラーにならないんだけど、どうして?
307 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:02:12 ] $a $bはsortブロックで使われる定義済みの特殊変数だから。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 23:43:20 ] utf8で保存できるエディタで、使いやすいものがありましたら、 教えてくれると、大変助かります。
309 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 23:55:58 ] >>308 emacs または meadow
310 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 23:56:23 ] OSは?
311 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 00:07:23 ] 板違いすぎるだろ…
312 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 15:06:35 ] >>308 Notepad++
313 名前:デフォルトの名無しさん [2008/11/02(日) 13:55:18 ] 質問です。まだイブジェクト指向は新米なんですが、 継承とかの説明をみるに、継承のスパゲッティになりそうな 気がするんですが その辺はエキスパートの実際ってどうなんでしょうか?
314 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:00:30 ] >>313 質問してないでソースコード読め。
315 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:17:25 ] イブジェクト指向
316 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:21:46 ] 英語でいうと、 ibject oriented
317 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:05:20 ] イブジェマスジー?
318 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:45:14 ] オブイェークト指向
319 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:19:24 ] 学校に 「CGI/Perl リファレンス」 こういう本があるんですがこの2つって同じようなもんなんですか? CGI=掲示板 Perl=通信 ってイメージがあるんですが
320 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:28:09 ] >>319 ja.wikipedia.org/wiki/Common_Gateway_Interface ja.wikipedia.org/wiki/Perl
321 名前:デフォルトの名無しさん [2008/11/02(日) 23:47:14 ] perlで指定したURLのファイルをダウンロードするにはどうすればいいんですか? system関数を使わないで実現したいです
322 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:57:19 ] LWP::UserAgent
323 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:27:35 ] >>321 URI::Fetch
324 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:02:59 ] >>306 なぜエラーにならなければならないの?
325 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:04:53 ] >>313 他言語同様、継承はなるべく使わない方向で。 他言語での経験があるなら無問題。
326 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:07:45 ] >>319 CGIがPerlで書かれたものとは限らない ていうかCGIとPerlじゃ比べる次元が違う とりあえずページめくれよ
327 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:08:47 ] >>321 CPAN LWP::Simple検索してサンプル試してみ
328 名前:デフォルトの名無しさん [2008/11/03(月) 23:12:57 ] ActivePerl 5.8.8を使ってます。PPMはGUIになったやつです。 PPMでリポジトリを追加したら、フリーズして、そのまま動かなくなりました。 追加したリポジトリは ppm.tcool.org/archives/ です。 何度起動しても、起動時にフリーズします。 多分追加したリポジトリを読みに行ってる時に固まってるんだと思います。 どうやったらこのリポジトリを削除できるでしょうか。 C:\Perlの中のどこかにリポジトリのURLが保存されてて、それを消したら良いんじゃないかと考えたんですが フォルダ内をGREPしてもURLは見つかりませんでした・・・。
329 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:38:30 ] C:\Documents and Settings\(user)\Local Settings\Application Data\ActiveState\ActivePerl\(build version)\ 以下の、ppm〜なんちゃら.dbファイルを消す。 ってか、DOS窓からコマンドライン用のppmでやればいい。C:\Perl\htmlにマニュアルもあることだし。
330 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 01:36:33 ] >>392 ありがとうございます。 言われて気づいてみたら、ppm-shellってのがあるんですね。 最近のActivePerlはGUI版PPMしか無いのかと思ってました。
331 名前:デフォルトの名無しさん [2008/11/07(金) 18:37:21 ] ActivePerlをインストールし、perlを採用したプログラミング入門書を見ながらやっているのですが、 ファイルを開くと一応コマンドプロンプトが起動し、実行されるのですが一瞬で消えてしまいます。 最初は、 print"やあ世界!\n;" exit; としか書いてなくて、一瞬で終わっちゃうからだなと思い(一瞬ですがやあ世界という表示はされてました)、 入門書の例文にあった print"名前を入力してください。\n"; $onamae=<STDIN>; chop $onamae; print"\n"; print"あなたのお名前は$onamaeさんです。\n; print"$onamaeさんこんにちは。"; exit; という内容のファイルを作ってみました。 しかし、名前を打ち込むスキもなく終了してしまいます。 エスパーにしか答えようがない質問かもしれませんが宜しくお願いします。 OSはXPで、入門書は2000年頃の古いものです。
332 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:48:53 ] >>331 まさかファイルをエクスプローラ上でクリックして動かしてる? それじゃダメだ まずコマンドプロンプトを起動してそこで C:\> perl [ ファイル名 ] [ RETURN ] で実行しないと
333 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:55:09 ] >>331 定番の入門書リャマ本 ttp://www.oreilly.co.jp/books/4873111269/
334 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:55:48 ] >>332 ありがとうございます。 さきほどwww.site-cooler.com/kwl/perl/ を読んでやってみたら色々できました。 さっきの二番目の例文はなにかミスってるみたいでエラーがなんとかって英文で返されてしまいましたが。 なんだこの本・・・大事なことが書いてない。
335 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:57:34 ] >>333 ありがとうございます。 また何かつっかえたら買い換えますw
336 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:11:31 ] 今は21世紀だぜ?なんでまた20世紀の古い本を・・・
337 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:14:29 ] >>336 じゃあ、2008年6月発売のを oreilly.com/catalog/9780596520106/
338 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:45:17 ] >>331 >print"あなたのお名前は$onamaeさんです。\n; 文字列を閉じてない。「\n」の後に「"」が必要。 ところで、文字列のクォートにはqq{}もおすすめ。
339 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:11:08 ] 質問です。 my %hash = @arr; $hash{'SendTE'} = 0; @arr = %hash; ハッシュのように扱われてる特殊な配列に 重複しないキーを与えるには上記のように 書いていました。 これを一発で書くにはどう書けばいいでしょうか? (配列をハッシュのように扱いたい。)
340 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 00:51:07 ] for(my i=0; i<@arr;i+=2){ $arr[$i+1] = 0 if $arr[$i] eq 'SendTE' }
341 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:02:11 ] >>339 普通に my %hash = ( @arr, 'SendTE' => 0 ) ; じゃダメなのか?サブルーチンとかでの常套手段だけど? sub hoge { my %hash= ( foo => 'bar', @_ ) ; return $hash{foo} ; } printf "%s\n", hoge( foo => 'foo' ) ;
342 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:37:45 ] ハッシュにリストを代入するときキーに相当するところに同じ値が複数あると どれが優先されるかは決まってたっけ? %h = (a => 1, a=> 2); print $h{a} 試せば今の処理系でどっちかはわかるけど、仕様としてマニュアル等に明記 されているかどうかを知りたい。
343 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:27:31 ] マニュアル代読サービスに頼めよ
344 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:46:01 ] >>342 programing perl のhashの説明、冒頭にそのまんまの記載があるじゃん。 my %h = ( a => 1, a=> 2 ) ; は、以下のコードと同じ効果がある。 my %h = () ; ${a} = 1; ${a} = 2; 同じキーだと通用しないとでも思うのはあなたの勝手。
345 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:54:02 ] >>342 上書きされるってことになるんだから()内がどっち向きに処理されるか考えりゃ良い