| HOME | FrontPage | 記事編集 | RSS |
参照の配列要素とか配列要素の参照とか Perl
まとめないと酷い。
1. 参照の配列要素のデリファレンス
以下のように書きます。
use strict;
my @array = (1,2,3,4,5);
my $r = \@array;
print $r->[0];
表示は1です。print $$r[0];でも良いのですが、配列、ハッシュ、関数の参照については、矢印演算子を使って記述する方法が望ましいとされています。
2. 配列中の参照のデリファレンス
以下のように書きます。
use strict;
my @array;
my $tmp = 1;
$array[0] = \$tmp;
print ${$array[0]};
仮に最後の行を$$array[0]と書いたとすると、[]の結合度が最低であるために、まず$array[0]の中身を見に行って欲しいのに、まず$arrayの中身を見に行きます。
3. 配列要素の参照
以下のように書きます。
use strict;
my %hash = ('a'=>1, 'b'=>222, 'c'=>3);
my $r = \($hash{'b'});
print $$r;
表示は222です。
4. いきなり無名配列を使う
以下のように書きます。
use strict;
my $r = [];
@$r = (1,2,3,4,5);
print $r->[0];
このへんが高級言語の凄さと言うか、勝手にメモリを確保してくれて超快適。2行目の=[]は不要ですが、$rが無名配列の参照であることを明示するために付けることが望ましいとされています。多次元は以下ようにします。
@{$r->[5]} = (6,7,8,9,10);
print $r->[5][1];
表示は7です。
5. でもやるな
Perlが最も苦手とする処理が添え字演算です。いわゆるforよりforeachが速いのはこのためです。以下のコードはforeachを使って1から100までの和を求める計算を一万回行います。コメントアウトしたforループバージョンよりも約50%高速です。
#! /usr/bin/env perl
#use strict;
use Benchmark;
my $t0 = new Benchmark;
for(0..10000) {
&bench;
}
my $t1 = new Benchmark;
my $td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
sub bench
{
my @old = (1..100);
my $new;
# for(my $i=0; $i<=$#old; $i++) {
foreach my $value(@old) {
$new += $value;
}
}
なるべく添え字を使わない処理が望ましいということです。先に紹介した処理は全て添え字を使っています。しいて言えば先に紹介した方法で書いた方がマシだけれども、最も良い方法は、pushなりpopなり文字列連結なりを駆使して、添え字を使わずに書くことです。
speed
/ 2008.03.02 21:08
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.
- 2008 Recent 50 Entries
- Windows Vista x64
2008.12.31 19:50 - 性格が良いor悪い
2008.12.30 02:45 - PC-MDVD/U2
2008.12.28 02:25 - USBメモリ5GBあたり\1,000
2008.12.25 22:10 - 植田佳奈叩かれる
2008.12.24 22:29 - 哲学熱再燃
2008.12.23 03:30 - Cha-la Head Cha-la
2008.12.21 13:47 - 紅第6巻
2008.12.17 02:19 - 民団、民主・公明支援へ
2008.12.16 03:30 - 口論における男性の勝率
2008.12.15 00:14 - 本業の話
2008.12.14 23:15 - 鉄拳王になったよー
2008.12.13 18:34 - やっぱりuse warningsを使おう
2008.12.11 23:02 - WinningEleven 2009 (PS3)
2008.12.03 20:31 - Ishkur's Guide to Electronic Music
2008.11.30 21:35 - ゲームも必要
2008.11.30 15:41 - UbuntuWWWサーバのセットアップ
2008.11.29 22:14 - らき☆すたOVA
2008.11.28 01:58 - Ubuntuデスクトップ用.vimrc
2008.11.27 22:02 - キーボードを水洗い
2008.11.25 01:33 - よりよい世界をMakeするために
2008.11.23 13:07 - だいぶ疲れも取れたようです
2008.11.20 08:56 - HDMI接続
2008.11.14 00:59 - またモニタ買った
2008.11.12 04:41 - うちの平尾がやりおった!!
2008.11.09 21:32 - ワイヤレスキーボード買った
2008.11.06 23:01 - PS3その後
2008.11.04 22:59 - PS3でかすぎ
2008.10.31 09:22 - ゲームばっかり!!111
2008.10.29 09:10 - 1$92yen
2008.10.27 23:29 - ヒアドキュメント中のハッシュ要素
2008.10.26 15:27 - 女性差別
2008.10.25 23:08 - 鉄拳5サウンドトラック
2008.10.24 04:11 - 新blogやることありすぎ
2008.10.22 00:39 - 鉄拳 DarkResurrection (PSP)
2008.10.20 00:08 - Linuxだけで足りるかも
2008.10.18 23:25 - PS3予約した
2008.10.18 00:26 - Firefox使えない
2008.10.17 23:18 - XML+XSL+Microformats
2008.10.17 00:59 - Minibuffer+AutoPagerize+LDRize
2008.10.15 22:52 - 心の余裕
2008.10.15 01:47 - IPパケットからWEPキーを抽出
2008.10.14 22:45 - Fedora Core4の壁紙
2008.10.13 19:29 - Fedoraマジおすすめ
2008.10.13 17:26 - 新サーバ構築中
2008.10.11 23:18 - 『安心ネットづくり』促進協議会
2008.10.09 22:42 - サーバ/インフラを支える技術
2008.10.09 20:57 - 田中理恵エロすぎ
2008.10.06 23:03 - 翻訳法人
2008.10.05 13:42 - ObjectDriver使えねえ。。
2008.10.02 22:39
- Archive
- 2006年
- 2006年01月
- 2006年02月
- 2006年03月
- 2006年04月
- 2006年05月
- 2006年06月
- 2006年07月
- 2006年08月
- 2006年09月
- 2006年10月
- 2006年11月
- 2006年12月
- 2007年
- 2007年01月
- 2007年02月
- 2007年03月
- 2007年04月
- 2007年05月
- 2007年06月
- 2007年07月
- 2007年08月
- 2007年09月
- 2007年10月
- 2007年11月
- 2007年12月
- 2008年
- 2008年01月
- 2008年02月
- 2008年03月
- 2008年04月
- 2008年05月
- 2008年06月
- 2008年07月
- 2008年08月
- 2008年09月
- 2008年10月
- 2008年11月
- 2008年12月