लाइन द्वारा इस रेखा के नीचे तोड़कर के बाद से यह नहीं किया गया है:
sub trim {
@_ = $_ if not @_ and defined wantarray;
# if there are no arguments, but a return value is requested
# then place a copy of $_ into @_ to work on
@_ = @_ if defined wantarray;
# if the caller expects a return value, copy the values in @_ into itself
# (this breaks the aliasing to the caller's variables)
for (@_ ? @_ : $_) { s/^\s+//, s/\s+$// }
# perform the substitution, in place, on either @_ or $_ depending on
# if arguments were passed to the function
return wantarray ? @_ : $_[0] if defined wantarray;
# if called in list context, return @_, otherwise $_[0]
}
मुझे लगता है कि कोड wantarray
चेकों के सभी के साथ एक सा कठिन हो जाता है इस बात से सहमत है, लेकिन परिणाम एक समारोह है कि एक स्तर के शेयरों है पर्ल के बिल्टिन कार्यों के साथ लचीलापन का। फ़ंक्शन "स्मार्ट" बनाने का शुद्ध परिणाम कॉल साइट को साफ करना है (लूपिंग संरचनाओं, अस्थायी चर, पुनरावृत्ति, ... से बचने के लिए) जो आवृत्ति के आधार पर फ़ंक्शन का उपयोग किया जाता है, अर्थात् कोड पठनीयता में सुधार कर सकता है।
sub trim {
@_ = @_ ? @_ : $_ if defined wantarray;
s/^\s+//, s/\s+$// for @_ ? @_ : $_;
wantarray ? @_ : shift
}
पहले दो लाइनों, एक में लुढ़काया जा सकता है, क्योंकि वे एक ही बात (@_
को बताए) बस विभिन्न स्रोत मूल्यों के साथ कर रहे हैं:
समारोह एक छोटा सा सरल किया जा सकता है। और बाहरी return ... if defined wantarray
अंत में जांच करने की कोई आवश्यकता नहीं है, क्योंकि शून्य संदर्भ में मूल्य लौटने से वैसे भी कुछ भी नहीं होता है।
लेकिन शायद मैं अंतिम पंक्ति को wantarray ? @_ : pop
पर बदल दूंगा क्योंकि इससे यह एक सूची (स्केलर संदर्भ में अंतिम तत्व) जैसा व्यवहार करता है।
सब एक बार कहा और किया जाता है, यह अनुमति देता है निम्नलिखित बुला शैलियों में इस्तेमाल किया जा करने के लिए:
my @test_array = ('string1', ' string2', 'string3 ', ' string4 ');
my @result = trim @test_array;
my $result = trim $test_array[0];
trim @test_array; # in place trim
और यहां तक कि अभी भी कॉल साइट पाश का समर्थन करता है:
my @result = map trim, @test_array;
या वरबोस रूप में दर्शा रूप में:
my @result = map trim($_), @test_array;
और इसका उपयोग थोड़ी देर के अंदरके समान किया जा सकता है
while (<$file_handle>) {
trim;
# do something
}
पर्ल में dwimmery के बारे में राय मिश्रित हैं। मुझे व्यक्तिगत रूप से यह पसंद है जब फ़ंक्शंस मुझे कॉलर को कोड करने के लिए लचीलापन देता है जो किसी फ़ंक्शन के कठोर इंटरफ़ेस के आसपास काम करने के बजाय समझ में आता है।
आप मानचित्र को उपयोगकर्ता को क्यों छोड़ना चाहते हैं, जबकि आप इसे दूर कर सकते हैं? –
संबंधित: [पर्ल में ट्रिम] (https://plus.google.com/105725977711317285348/posts/ienzxqHJmRe) – daxim
वांछे और इसी तरह के जादू की छल एक उग्र हैं। जब तक आपको करना नहीं है तब तक चालाक प्रोग्रामिंग न करें। एपीआई चालाक कभी नहीं। – tsee