Hello erhan,

There are two problems with your code. The first is that it fails to distinguish between directories and files within the foreach loop. I assume your script resides in /home/abc/Desktop/test, in which case the call to readdir will return the name of the script (and the names of any other files in this directory) along with the subdirectory names. Then within the loop the call to chdir($subdir) will fail. As james28909 has shown, this is easily fixed by putting:

next if -f $subdir;

as the first statement within the loop, although I would prefer:

next unless -d $subdir;

The second problem is that the statement chdir(".."); at the end of the loop fails to return the current working directory to the correct location, so on a subsequent iteration chdir($subdir) is called with the value a, but there is no directory named a within the current working directory. A simple solution is to reset the current working directory at the start of each loop iteration:

foreach my $subdir ( sort @subdirs ) { chdir($dir); next unless -d $subdir; ...

Here is my preferred version:

use strict; use warnings; use Cwd; use File::Path qw( make_path ); my $dir = cwd(); opendir(my $dh, $dir) or die "Unable to open directory '$dir': $!" +; my @subdirs = readdir $dh or die "Unable to read directory '$dir': $!" +; closedir $dh or die "Unable to close directory '$dir': $! +"; my $result_path = $dir . '/results'; make_path $result_path; chdir $dir; for my $subdir (sort @subdirs) { chdir $dir; next unless -d $subdir; my $newdir = $result_path . '/' . $subdir; make_path $newdir; chdir $dir . '/' . $subdir; system("echo '1 0' | program -f methane.trr -o $result_path/$subdi +r/outfile.txt"); }

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


In reply to Re: How to get sub-folder names using Perl? by Athanasius
in thread How to get sub-folder names using perl? by erhan

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.