Perl 板


LINE

※ 引述《cutecpu (可愛中央處理器)》之銘言: : 問題一: : 請問 Perl 有辦法像 C 一樣,可以將一個 pointer 指到 array 的某個 : index 嗎? : 例: : C: : int array[] = {1,2,3,4,5}; : int ptr = array + 2; /* : 將 ptr 指向 &array[2] : 所以 ptr[0] = 3 : ptr[1] = 4 : ptr[2] = 5 : */ : Perl: : @array = (1,2,3,4,5); : ######################################################## : # 有辦法用什麼 reference 來達到上面 C 的功能嗎? : # 希望不要用複製陣列的方式 → @arr = @array[2..$#array]; : ######################################################## 這個問題要達到你描述的那樣, 最最基本上是不行. (不過 perl 很靈活, TIMTOWTDI, 所以加工一下還是有方法做到) reference 和 pointer 的主要差異, 就是 reference 不能作 pointer 的運算, 不可以 reference + 1 來取得所謂的下一項. 所以只提供 reference 而沒有 pointer 的 runtime system 可以提供 garbage collection 的功能. 如果像 pointer 那樣可以隨意加減, runtime system 無法知道到底有哪一個 address 是真的再也不會用到. 你可以弄一個 $ptr = \$array[2]; 但是這樣就只有 ref 到那一格, 而不是一整串; 如果你要做到一整串, 那麼也許可以考慮迂迴一點包成一個物件, 這個物件裡面有一個 array ref, 和一個 begin index, 存取的時候再去計算實際的那一項出來.. 你可以考慮 perl tie 的功能, (參考這邊 http://perldoc.perl.org/perltie.html 和這邊 http://perldoc.perl.org/Tie/Array.html ) 你可以做出一個用起來就像正常 array 的東西, 而且不用複製原來的 array. 應該是完全符合你的需求. (也有可能 CPAN 已經有這種 package 了, 不過我還沒有去找) : 問題二: : Perl: : @array = (1,2,3,4,5); : @arr = @array[2..$#array]; : $ref = \@arr; # ←這樣寫 ok : ############################################## : # 想問的就是上面那行如果改成: : # $ref = \(@array[2..$#array]); : # 為什麼這時候的 $ref not an ARRAY reference? : ############################################## : 謝謝^_^ 因為 @array / @arr 這樣的寫法是 array 而 @array[2..$#array] 是 @array 裡面 2 ~ $#array 這幾個元素排的 list \@arr 是指向 @arr 的 ref \(@array[2..$#array]) 是一排分別指向 @array 的 2 ~ $#array 元素的 ref 所以 $ref = \(@array[2..$#array]) 的話, $ref 的值應該是 \$array[$#array] 如果對於什麼時候是 array 什麼時候是 list 有一點困惑.. 你可以這樣去記: array 和 list 是不一樣的東西, array 可以當 list 用, list 不能當 array 用. (但 list 可以指定到一個 array 裡面去) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.242.246.249
1F:推 abliou:推阿!! 03/29 17:23
※ 編輯: CindyLinz 來自: 210.242.246.249 (03/29 17:44)
2F:推 xatier:推! 03/30 01:03
3F:推 dryman:push!! 03/30 12:55
4F:推 cutecpu:謝謝 Linz ! 回答的好詳細 03/30 18:24







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP