Perl 程式設計教學 【限】

Mac OS X 平台上程式設計的相關問題討論

版主: bryanchangdigdog謝孟叡

回覆文章
內容
發表人
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#1 文章 bryanchang »

版主謝大人說我們程式設計區人氣太弱,白萊恩趕快來這裡貼一些對於大家有價值的程式,以鼓舞士氣。

今天要介紹的是 Perl 語言的寫作。白萊恩一直以為,學程式語言成功的秘訣只有一個,就是要有動機。

為了要給大家一個動機,只要好好的研讀以下的 Perl 範例程式,保證你會有豐富的(實質)收獲。

至於你該怎樣去執行這個程式,就當成回家的功課,請自行上網或是跑圖書館找答案。另外請未滿十八歲的讀者自行離去,謝謝合作。

<BLOCKQUOTE><font size="1" face="XYZ">code:</font><HR><pre>
#!/usr/bin/perl -w

my @year_range = (1954 .. 2002);
my @month_range = (1 .. 12);
my $download_dir = "pb";

chdir;

unless(-e $download_dir && -d $download_dir){
mkdir $download_dir;
}

chdir "$download_dir" or die "Can't cd to pb: $!\n";

foreach $yr (@year_range){
foreach $mn (@month_range){
printf "* Getting file for %d/%02d...\n", $yr, $mn;
system sprintf "curl -sO [url=http://rosbif.free.fr/playboy/img/%d_%02d.jpg\n",]http://rosbif.free.fr/playboy/img/%d_%02d.jpg\n",[/url] $yr, $mn;

if($yr==2002 && $mn==7){
last;
}
}
}

print "All done. Enjoy!\n";

system "open .";

</pre><HR></BLOCKQUOTE>

[ 09-13-2002: 留言編輯者: 白萊恩 ]
fddi1
留言破百
文章: 188
註冊時間: 05/03/2001 1:01 am
來自: USA/Seattle, WA
聯繫:

Perl 程式設計教學 【限】

#2 文章 fddi1 »

天啊,從瑪麗蓮夢露的時代開始啊,真是一網打盡。
留言五百如一日
文章: 610
註冊時間: 12/25/2001 1:01 am

Perl 程式設計教學 【限】

#3 文章 »

白老大,

一次過下載伍佰多幅圖片,有點兒難度。小弟用 applescript 改寫,每次只下載一年的圖片,野人獻曝,勿怪。

以下的指令,除分行外,有三個錯誤,更正後你會有豐富的(實質)收獲(白老大用語)。

-- script starts
set baseURL to "http://ubb.frostyplace.com.tw"
set fileList to {}
repeat with i from 1953 to 2002
repeat with j from 1 to 12
set end of fileList to (i & "_" & text -2 thru -1 of ("0" & j) & ".jpg") as string
end repeat
end repeat
set fileList to items 12 thru -6 of fileList

set yearList to {}
repeat with i from 2002 to 1953
set end of yearList to i
end repeat
set chooseYear to (choose from list yearList with prompt "please choose the year" default items {} without multiple selections allowed and empty selection allowed)
if chooseYear = false then
return
else
set desireYear to (item 1 of chooseYear)
end if

set desireList to {}
repeat with i in fileList
if contents of i starts with desireYear then set end of desireList to contents of i
end repeat

with timeout of 600 seconds
repeat with i in desireList
set pixPath to ((path to desktop as string) & contents of i)
-- set pixURL to baseURL & contents of i
try
tell application "URL Access Scripting" to download pixURL to file pixPath replacing yes
end try
end repeat
end timeout
-- script ends

要提示嗎?
頭像
the real unknown
冰果室打手
文章: 2610
註冊時間: 04/26/2001 1:01 am
來自: GMT-5
聯繫:

Perl 程式設計教學 【限】

#4 文章 the real unknown »

<BLOCKQUOTE><font size="1" face="XYZ">quote:</font><HR>原始發信人 白萊恩:
<STRONG>今天要介紹的是 Perl 語言的寫作。白萊恩一直以為,學程式語言成功的秘訣只有一個,就是要有動機。</STRONG><HR></BLOCKQUOTE>

沒錯。像下個月的貸款要繳、明天的買菜錢、兒子的托兒所...等等,都是很好的動機。
頭像
the real unknown
冰果室打手
文章: 2610
註冊時間: 04/26/2001 1:01 am
來自: GMT-5
聯繫:

Perl 程式設計教學 【限】

#5 文章 the real unknown »

哦,忘了還有要給蘋果的香油錢。
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#6 文章 bryanchang »

<BLOCKQUOTE><font size="1" face="XYZ">quote:</font><HR>原始發信人 悲:
<STRONG>白老大,一次過下載伍佰多幅圖片,有點兒難度。小弟用 applescript 改寫,每次只下載一年的圖片...</STRONG><HR></BLOCKQUOTE>

你看,馬上不就有 AppleScript 版了吧?搞不好等會 Oeyvind 就會貼出 Shell Script 版了。 :-)

所以囉~寫程式不難,難的是找到想寫的目標與動機。

p.s. 我之所以讓它一次抓全部,也是要讓讀者因受不了而產生改寫的念頭,這樣不就很快學會 Perl 了嗎... 呵。

不過悲兄 (不是杯兄) 故意留一手的作法也很好,值得學習。 [img]images/smiles/icon_wink.gif[/img]
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#7 文章 bryanchang »

再回來賣瓜一下,像我們這樣的「另類 AppleScript/Perl 教學」當然是比這種文章有吸引力多了:
http://developer.apple.com/internet/webservices/applescripttoperl.html
頭像
謝孟叡
討論區管理員
文章: 960
註冊時間: 05/01/2001 1:01 am
來自: 邪教組織 #osxchat
聯繫:

Perl 程式設計教學 【限】

#8 文章 謝孟叡 »

<BLOCKQUOTE><font size="1" face="XYZ">quote:</font><HR>原始發信人 白萊恩:
<STRONG>你看,馬上不就有 AppleScript 版了吧?搞不好等會 Oeyvind 就會貼出 Shell Script 版了。 :-)
</STRONG><HR></BLOCKQUOTE>

剛剛試寫了一下,shell script 寫出來很難看... 還是用 perl 好
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#9 文章 bryanchang »

<BLOCKQUOTE><font size="1" face="XYZ">quote:</font><HR>原始發信人 謝孟叡:
<STRONG>剛剛試寫了一下,shell script 寫出來很難看... 還是用 perl 好</STRONG><HR></BLOCKQUOTE>

啊~忘記謝大人這位 Unix hacker... [img]images/smiles/icon_razz.gif[/img]

btw, curl 不是跟 wget 沒啥差別?還是你是覺得有不少 Installer script 會因沒 wget 而出問題?

另外這有 Jaguar 版的 vim: http://macvim.swdev.org/OSX

[ 09-14-2002: 留言編輯者: 白萊恩 ]
頭像
謝孟叡
討論區管理員
文章: 960
註冊時間: 05/01/2001 1:01 am
來自: 邪教組織 #osxchat
聯繫:

Perl 程式設計教學 【限】

#10 文章 謝孟叡 »

<BLOCKQUOTE><font size="1" face="XYZ">quote:</font><HR>原始發信人 白萊恩:
<STRONG>啊~忘記謝大人這位 Unix hacker... [img]images/smiles/icon_razz.gif[/img]
btw, curl 不是跟 wget 沒啥差別?還是你是覺得有不少 Installer script 會因沒 wget 而出問題?
</STRONG><HR></BLOCKQUOTE>

我說 missing 的意思是, 我希望 apple 內附啦..
BTW, I always compile vim by myself since the number of patches is in the order of 10^2...

我想 apple 還是會盡量避免用太多 gnu 的東西. 因為授權的問題有點麻煩,但是既然有 emacs 就別這麼龜毛嘛....

我用 wget 是比較習慣點, curl 還要多加 -o .... 但是我在 FreeBSD 上面比較喜歡用 fetch :-)
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#11 文章 bryanchang »

據我所知 wget 是 license 的緣故不能加在 Mac OS X/Darwin 裡。
留言五百如一日
文章: 610
註冊時間: 12/25/2001 1:01 am

Perl 程式設計教學 【限】

#12 文章 »

<BLOCKQUOTE><font size="1" face="XYZ">quote
不過悲兄 (不是杯兄) 故意留一手的作法也很好,值得學習。
見笑:) 因這是限制級圖片,不宜編譯後可立即下載。


提示一:

set baseURL to "http://ubb.frostyplace.com.tw"

variable [ baseURL ] 的 value [ "http://ubb.frostyplace.com.tw" ] 是錯誤的,正確的網址,細看第一個留言。


白老大,小弟有一個一次開啟多個網頁的 applescript,未知可否在此公諸同好?
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

Perl 程式設計教學 【限】

#13 文章 bryanchang »

白老大,小弟有一個一次開啟多個網頁的 applescript,未知可否在此公諸同好?

當然當然,求之不得呢! [img]images/smiles/icon_biggrin.gif[/img]
留言五百如一日
文章: 610
註冊時間: 12/25/2001 1:01 am

Perl 程式設計教學 【限】

#14 文章 »

解答一:

句子 set baseURL to "http://ubb.frostyplace.com.tw" 應改為

set baseURL to "http://rosbif.free.fr/playboy/img/"

明白了什麼是變數,值,及如何宣告之?


提示二:

applescript 的其中一個迴圈句子格式為

repeat with [loop variable] from [integer] to [integer] [by stepVal]
-- statement
end repeat

舉例:repeat with i from 1 to 10,則迴圈第一次執行時,i = 1; 迴圈第二次執行時 ,i=2。因 stepVal 預置為 1,如不另行指定。

所以,此迴圈出了錯誤:

repeat with i from 2002 to 1953
set end of yearList to i
end repeat
留言五百如一日
文章: 610
註冊時間: 12/25/2001 1:01 am

Perl 程式設計教學 【限】

#15 文章 »

解答二:

迴圈

repeat with i from 2002 to 1953
set end of yearList to i
end repeat

應改為

repeat with i from 1953 to 2002
set end of yearList to i
end repeat

提示三:

applescript 用 -- 來宣告其後的同一行字為註解,像 C shells 中 # 的用法。程序中有一行指令錯誤地宣告為註解。
留言五百如一日
文章: 610
註冊時間: 12/25/2001 1:01 am

Perl 程式設計教學 【限】

#16 文章 »

解答三:

句子
-- set pixURL to baseURL & contents of i

應改為
set pixURL to baseURL & contents of i
回覆文章