2012年5月10日

[Perl] 陣列在副程式之間傳遞

通常傳遞陣列都是傳一個 reference 的記憶體位址過去,而不會真正把整個 Array 傳過去(雖然也是可以)

傳遞到副程式時:前面要加 \ ,讓 Perl 傳遞 reference 到 sub 內,副程式內用 scalar ($) 來接
副程式回傳後,要接收時:要解析 reference (通常稱作 dereference),在外面加上 @{ } 來 dereference
下面是一個簡單的範例

#!/usr/bin/perl

@mainAry = ("abc", "def");
#deference and expand the array
@returnAry = @{ &getInterface(\@mainAry) };
print "origin : @mainAry\n";
print "return : @returnAry\n";

sub getInterface() {
        my ($rec_ref) = @_ ;
        $a_ref = [];
        foreach $values (@{ $rec_ref }) {
                push(@$a_ref, $values);
                print "push $values\n";
        }
        return $a_ref;
}

2012年5月4日

[Perl] cpanm 搭配 CPAN::Mini 的設定方式

之前的文章有介紹了 CPANPLUS 與 CPAN::Mini 但是現在更好用的模組管理程式是 cpanm (發音為 cpanminus)安裝方式為


curl -L http://cpanmin.us | perl - --sudo App::cpanminus

或直接下載 cpanm 檔案,本身是一隻 Perl 程式

curl -LO http://xrl.us/cpanm
chmod +x cpanm 

使用方式跟 CPANPLUS 比起來真的是 minus 許多,摘錄 cpanm 使用方式
如下

 cpanm Test::More # install Test::More
 cpanm MIYAGAWA/Plack-0.99_05.tar.gz              # full distribution path
 cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz  # install from URL
 cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz   # install from a local file
 cpanm --interactive Task::Kensho                 # Configure interactively
 cpanm .                                          # install from local directory
 cpanm --installdeps .                            # install all the deps for the current directory
 cpanm -L extlib Plack                            # install Plack and all non-core deps into extlib
 cpanm --mirror http://cpan.cpantesters.org/ DBI  # use the fast-syncing mirror
 cpanm --scandeps Moose                           # See what modules will be installed for Moose

在這邊要介紹的是如果之前有用 CPAN::Mini 在本地 mirror 了
最新的 CPAN 模組庫,此時要配合 cpanm 使用的話

./cpanm --mirror /cpan/mirror --mirror-only 模組名稱

P.S. /cpan/mirror 是 cpan local repository 的路徑

2012年5月3日

[iOS] UITextview 拉到最下方文字無法完整顯示問題

最近開發一個新聞閱讀軟體,裡面有些內容使用 UITextview 來呈現,呈現當然是沒有問題但是奇怪的是將卷軸拉到最下面後大概有兩行的內容會看不到,需要用手往上拉(捲動 scrollbar)才能看得到,經過一番查詢看來是 iOS 預設的呈現方式,我們必須自己插入一些空間讓文字能夠往上提一點而不會被隱藏起來,方法如下

UITextview 名稱為 : newsTextView

UIEdgeInsets contentInset = newsTextView.contentInset; //產生一個 UIEdgeInsets 物件
contentInset.bottom = 45.0; //下方空白空間,視需求增減
newsTextView.contentInset = contentInset; //設定 UITextview 的 contentInset 屬性

原始出處 : http://stackoverflow.com/questions/1582554/iphone-uitextview-leaves-room-for-2-lines-at-the-bottom
這個小工具發生錯誤