perl中的Glob函数无法正常工作

时间:2015-07-30 04:43:32

标签: perl

我使用glob函数使用通配符捕获目录中的文件并将其存储在数组中。我在windows上这样做。
我能够捕获正确的文件,然后我需要邮寄它,但它只捕获名称而不是完整的文件,即在邮件中我没有得到文件的内容。以下是我脚本的片段。请告诉我出错的地方。

opendir(DAPATH,$sDAPATH) or die "Can't open $sDAPATH: $!"; 
print OUTLOG "\nfound da path : $sDAPATH\n"; 
my @adirs = readdir(DAPATH); 
print  OUTLOG "Starting capturing DA\n";
print  OUTLOG "checking if we have value of run id : $runVar\n";

my $pattern =  "*$runVar.csv";
print OUTLOG "$pattern\n";   
($pattern) = @_; 
@da =glob ("$sETLDAPATH/*$runVar.csv");
print  OUTLOG "da file : @da\n";
print  OUTLOG "Assigned DA\n";

closedir(DAPATH);

1 个答案:

答案 0 :(得分:1)

我认为您应该使用MIME::Lite 模块发送带附件的电子邮件。

示例:

use MIME::Lite;

my $msg = MIME::Lite->new(
    From    => 'sur@example.com',
    To      => 'serenesat@example.com',
    Bcc     => 'test@example.com',
    Subject => "Use of MIME::Lite",
    Type    => "text/plain",
    );

$msg->attach(
    Type=> "TEXT",
    Path =>"/path/to/file",
    Filename =>"filename.txt",
    );

$msg->send;

glob提供完整的文件路径。之后,您需要阅读并篡改文件的内容。为此,您可以使用File::Slurp'read_file函数:

Use File::Slurp::read_file;
# read in a whole file into a scalar
my $text = read_file( 'filename' );

如果您无法安装File::Slurp模块,可以这样做:

foreach my $file (@da)
{
    open my $fh, '<', $file or die $!;

    my $text = do {
        local $/;
        <$fh>
        };

    close $fh;
}