अपने ./emails
निर्देशिका इन फ़ाइलें हैं, तो:
1.msg
2.msg
3.msg
फिर अपने @files
दिखेगा नाम बदलने से पहले ('.', '..', '1.msg', '2.msg', '3.msg')
लेकिन अपने rename
की तरह कुछ 'emails/1.msg'
जैसे नाम, 'emails/2.msg'
, आदि चाहता है तो आप कर सकते हैं chdir
:
chdir('emails');
for (@files) {
#...
}
आप शायद ch eck chdir
वापसी मूल्य भी।
या जोड़ने निर्देशिका नाम अपने आप को:
rename('emails/' . $old, 'emails/' . $_) or print "Error renaming $old: $!\n";
# or rename("emails/$old", "emails/$_") if you like string interpolation
# or you could use map if you like map
आप grep
का उपयोग कर अपने निर्देशिका पढ़ने और छानने गठबंधन करने के लिए चाहते हो सकता है:
my @files = grep { /^RE .+msg$/ } readdir(DIR);
या यहाँ तक कि इस:
opendir(DIR, 'emails') or die "Cannot open directory";
for (grep { /^RE .+msg$/ } readdir(DIR)) {
(my $new = $_) =~ s/^RE //;
rename("emails/$_", "emails/$new") or print "Error renaming $_ to $new: $!\n";
}
closedir(DIR);
स्रोत
2011-12-09 19:54:51
आप त्रुटि ($!) प्रिंट यदि आप क्या गलत है की एक विचार प्राप्त कर सकते हैं ... – pilcrow
उनका कहना है कि बाहर के लिए धन्यवाद। त्रुटि 'ऐसी कोई फ़ाइल या निर्देशिका नहीं है'। मुझे आश्चर्य है क्योंकि $ पुराना फ़ाइल नाम सटीक है। – Johnathan1
ध्यान दें कि 'नाम बदलें' क्रॉस-प्लेटफ़ॉर्म समर्थन का आनंद नहीं लेता है, जबकि 'फ़ाइल :: कॉपी'' 'move' फ़ंक्शन – Zaid