मैंने सोचा कि मुझे नक्शा समझा गया है, हालांकि निम्नलिखित के परिणाम हैं जिन्हें मैं समझ नहीं पा रहा हूं। मुझे पता है कि यह क्यों हो रहा है मैं नहीं जानता कि यह कैसे हो रहा है।
समस्या यह है कि @array की सामग्री बदल रही है क्योंकि $_
_do_stuff_to_file
कॉल के दौरान रीसेट किया जा रहा है। इसलिए मुद्रित किया गया है here: \nhere:\n
जब मुझे लगता है कि यह here: donkie\nhere: kong\n
हो।
नोट: यह परीक्षण कोड नहीं है। यह सिर्फ मुझे प्रयोगशाला से देखकर याद है। @array
की सामग्री क्यों बदल रही है?
यदि मैं $f
पर _some_func
से 1 लौटने से पहले सेट करता हूं। फिर सरणी अभी भी बरकरार है।
my @array = ("donkie", "kong");
map { push @junk, _some_func('blah', $_); } @array;
if (join ('', @junk) !~ /0/)
{ # for example sake this is always true since return 1 from _some_func.
print map { "here: $_\n"; } @array;
}
sub _some_func
{ # for example sake, lets say $f always exists as a file.
my $j = shift;
my $f = shift;
return 0 if !open(FILE, "< $f");
close FILE;
_do_stuff_to_file($f);
return 1;
}
sub _do_stuff_to_file
{
my $f = shift;
open(IN, "< $f");
open(OUT, "> $f.new");
while (<IN>)
{
print OUT;
}
close IN;
close OUT;
}
आपके प्रश्न में पहले से ही इसका उत्तर है - आपने पहले ही समझाया है कि यह कैसा हो रहा है। क्या आप अपना प्रश्न कुछ ऐसे में बदलना चाहते हैं जैसे "मैं सामान क्लॉबर को $ _' देने से कैसे बचूं? क्योंकि यह एक है जिसे हम उत्तर दे सकते हैं (और माइकल कारमेन ज्यादातर में पहले से ही हैं) – hobbs
मैं सुझावों का सुझाव दिया गया शीर्षक है। @ क्या आप इसे बदलें? – dolmen