perl 实现 文件 检测

perl 实现 文件 检测,第1张

#compare folders

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/perl

use 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。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12246198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存