use strict
sub get
sub FolderCompare
print "perl foldercompare.pl <folder1 name><folder2 name>\n"
if ( @ARGV <2 )
{
die
}
my $dirA = $ARGV[0]
my $dirB = $ARGV[1]
FolderCompare($dirA, $dirB)
FolderCompare($dirB, $dirA)
sub get
{
my $dir = $_[0]
my %array
opendir(DIR, $dir)
while (my $file = readdir(DIR))
{
my @array_tmp = stat("$dir/$file")
if($file =~ m/^[^.]/)
{
if(-d "$dir\\$file")
{
$array{$file} = [$array_tmp[7], "1"]
}
if(-f "$dir\散毁察\$file")
{
$array{$file} = [$array_tmp[7], "0"]
#print "$file\t$array{$file}[1]\n"
}
}
}
return %array
}
sub FolderCompare
{
my $FolderA = $_[0]
my $FolderB = $_[1]
my %arrayA = get($FolderA)
my %arrayB = get($FolderB)
foreach my $FileNameA (keys(%arrayA))
{
if(exists($arrayB{$FileNameA}))
{
if($arrayA{$FileNameA}[1] eq "1")
{
if($arrayB{$FileNameA}[1] eq "1")
{
print "$FileNameA\taaa\n"
FolderCompare($FolderA."\\".$FileNameA, $FolderB."\\".$FileNameA)
}
}
if($arrayA{$FileNameA}[1] eq "0")
{
if($arrayB{$FileNameA}[1] eq "0")
{
if($arrayA{$FileNameA}[0] != $arrayB{$FileNameA}[0])
{
print "$FolderA\\$FileNameA is different from $FolderB\\$FileNameA\n"
}
}
}
}
else
{
print "$FolderA\冲茄\$FileNameA is not exitst in $FolderB\n"
}
}
}
经过余前测试,可用
#!/usr/bin/perluse 5.010
# (1)
say '(1) ', fileno OUT ? 'yes' : 'no'
# (2)
open OUT, '>', "filename"
print OUT "abc\n"
say '(2) ', fileno OUT ? 'yes' : 'no'
close OUT
# (3)
say '(3) ', fileno OUT ? 'yes' : 'no'
__DATA__
在perl里,fileno()函数可以返回句柄的文件描述符。可以使用fileno函数判断某个变量是否是文件句柄,判断文件句柄是否正常打开,判郑拿断文件句柄缓空的类型。
标准输入输出句柄 STDIN, STDOUT和 STDERR 的文件描述符 分别是0,1和 2 (Unix 标准传统),标准文件输入输出句柄的值从3开始,其具体值喊哪搭由句柄打开的顺序决定。若某变异 是一个普通变量,则fileno的返回值 是undef;若某个文件句柄未正常打开或者已关闭,fileno返回的值 也是undef。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)