http://www.perlmonks.org?node_id=985627

paddycoep has asked for the wisdom of the Perl Monks concerning the following question:

I am checking if the Unicode directory exists using -d check and if Exists then copying the files in the unicode directory using System DOS COPY command. The Unicode directory name is taken from STDIN. But though the Directory exists, it active perl shows false for -d check. If instead of taking the unicode directory name from STDIN, if I hard core the name in the perl script then it works. How Can I take the unicode directory name from STDIN which I can check if Exists using -d and then can COPY the files in this directory. I am using Active Perl 5.14

Replies are listed 'Best First'.
Re: Check if unicode directory exists
by moritz (Cardinal) on Aug 06, 2012 at 08:17 UTC
Re: Check if unicode directory exists
by Anonymous Monk on Aug 06, 2012 at 08:50 UTC

      The wordy approach

      use Fcntl q' :mode '; use Win32::Unicode::Native; use Data::Dump; my $filename = shift; my @f = my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename); dd \@f, S_ISDIR( $mode ), S_ISREG($mode);

      Less wordy

      #!/usr/bin/perl -- use strict; use warnings; use Data::Dump; use File::stat(); use Win32::Unicode::Native; # stat is statW, open is openW, ... for my $filename ( @ARGV ){ my $stat_obj = File::stat::populate( stat( $filename ) ); dd $filename, $stat_obj, { isdir => -d $stat_obj, isfile => -f $st +at_obj }; } __END__ $ perl win32.unicode.stat.utf8.pl . win32.unicode.stat.utf8.pl ( ".", bless([3, 0, 16895, 1, 0, 0, 3, 0, 1344244307, 1344244307, 115650180 +3, "", ""], "File::stat"), { isdir => 1, isfile => "" }, ) ( "win32.unicode.stat.utf8.pl", bless([3, 0, 33206, 1, 0, 0, 3, 444, 1344244390, 1344244390, 1344244 +307, "", ""], "File::stat"), { isdir => "", isfile => 1 }, )