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


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

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



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 あたり


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
上書きされるってことになるんだから()内がどっち向きに処理されるか考えりゃ良い

346 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:03:31 ]
いや、少なくとも考えて分かる類のものじゃないでしょ。



347 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:34:34 ]
@arrには、$arr[0] = 0 しか実行されないような気がするのですが、何故以下のような結果に
なるのでしょうか?

use Data::Dumper;

$i = 0;
$arr[$i] = $i++;

print Dumper \@arr; #=> [undef, 0]

348 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:20:11 ]
むかしPerlクイズで結城さんも混乱してたな。
俺のイメージでは、
= (代入するよー)
$i (右辺の$iは0だなー)
++($iをインクリメントするよー)
$arr[$i] ($arr[$i]に0代入するんだなー。$iはなんだろなー。1だなー)
ってことで、$arr[1]が0になる。






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

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

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