2015-08-27 21 views
0

這最有可能是一個愚蠢的問題,但在這裏有雲:製作整潔(perl的)回報

在許多模塊我有多個點,這是我返回到調用腳本。但在實際返回之前,我需要做一些整理雜事,例如將目錄更改爲父目錄等。

我寫了一個可以對所有返回點都做到這一點的子文件。不過,我能想到的使用它的唯一辦法是讓

tidy_up(); 
return (LIST); 

我想有一個接受的返回值(s)列表子和有子也返回到調用腳本:

tidy_up_and_return(LIST); 

這是否可能?

回答

2

這可能不是一個好主意。圍繞調用者上下文等待發生一系列細微的陷阱。

但是 - return實際上不是子要求 - 如果沒有return子隱式返回最後一次計算的結果。

#!/usr/bin/env perl 

use strict; 
use warnings; 

sub parent { 
    my @results = ("one", "two"); 
    child (@results, "some_other_value"); 
} 

sub child { 
    return (@_); 
} 

print parent(); 

因爲child返回它的參數 - 爲parent最後一行是調用child - 然後parent隱含返回child結果。

雖然我會建議你不要這樣做,因爲我稱之爲不好的風格 - 未來的維護程序員不一定會知道你在做什麼。

你也許可以改善這種輕微:

return child (@results, "some_other_value"); 

但是記住,你可以與回報方面一些輕微的奇怪結束 - 比如:

#!/usr/bin/env perl 

use strict; 
use warnings; 

sub parent { 
    my @results = ("one", "two"); 
    return child(@results, "some_other_value"); 
} 

sub child { 
    return (@_); 
} 

my $result = parent(); 
print $result; 

sub parent2 { 
    my @results = ("one", "two"); 
    return (@results, "some_other_value"); 
} 

my $result = parent2(); 
print $result; 

由於操作的上下文,看起來非常相似,但沒有相同的結果。

+0

好的,令人信服的,但我有多個返回點,有些是錯誤返回,其他人返回不同的列表。除了最後一個範圍外,_explicit_ return都是必須的,不是嗎? – MeirG

+1

是的。隱式返回僅適用於子結尾。我通常不喜歡隱性回報 - 它們是未來最終解決問題的好方法,例如,有人爲了診斷問題而增加了「打印」權利。 – Sobrique

+1

謝謝!那麼,還有一條線不是太痛苦吧? – MeirG