小编Sin*_*nür的帖子

如何比较两个文件并显示Perl中的差异?

我正在尝试编写Perl脚本来比较2个文件的内容,以便列出所看到的任何差异.尝试以下但我不确定如何继续下去.请注意,以下只是脚本的一部分,因为我事先已对2个文件的内容进行了排序.提前致谢.

open (FILE1, "log") || die ("Can't open file log for reading") ;
open (FILE2, "master") || die ("Can't open file master for reading") ;

@file1 = <FILE1> ;
@file2 = <FILE2> ;

#$perlcompare = (compare('log','master')== 0) ;
#die ("Log and master files are equal and match.\n") ;

if (@file1 eq @file2) {

print "Log and master are equal and match.\n" ;
} else  ????????????

exit 0;
Run Code Online (Sandbox Code Playgroud)

perl diff file

1
推荐指数
1
解决办法
2万
查看次数

当我尝试使用Perl的DBD :: mysql时,为什么会出错?

我正在尝试使用Perl将数据写入MySQL数据库.但是,当我运行我的脚本时,我收到以下错误:

Can't locate loadable object for module DBD::mysql in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at LargeLDAPSearch.pl line 10.

我确实有这些"使用"语句和以下代码.这只是一个小摘录,因为脚本在我尝试数据库连接之前工作:

use DBD::mysql;
use strict;
use warnings;
my $query_handle;

my ($platform,$database,$host,$port,$db_user,$pw) = ("mysql","results","localhost","3306","root","mysql123");

my $dsn = "dbi:$platform:$database:$host:$port";

my $connect = DBI->connect($dsn,$db_user,$pw) || die "Could not connect to database";

my $query_insert = "INSERT INTO " . $dbname . "(uid,status,lstpwdset,reset) VALUES (" . $strSAMA . "," . $strAcctControl . "," . $pwLS . "," . $reset . ")";

$query_handle = $connect->prepare($query_insert);
$query_handle->execute();
Run Code Online (Sandbox Code Playgroud)

我已经进入我本地的Perl文件夹,并搜索了lib文件目录.在 …

mysql perl dbi dbd

1
推荐指数
1
解决办法
4384
查看次数

在Perl中,如何在遍历哈希时跳过空键?

这是我的问题,我对Perl知之甚少,而且我有这个功能需要修复.

deviceModelMenu()调用此函数时,CLI将显示以下文本:

The following models are available
==================================================
1.   
2. Cisco1240 
3. Catalyst3750 
4. Catalyst3650 
5. HP2524 

第一项是空的,这是错误的,我需要修复它,显示此菜单的代码片段是:

my $features = shift;
print "=" x 50, "\n";
print "The following models are available\n";
print "=" x 50, "\n";
my $i=1;
foreach (keys %{$features->{features}[0]->{deviceModel}})
{
    print "$i. $_ \n";
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

如果我添加以下行:

warn Dumper($features->{features}[0]->{deviceModel});
Run Code Online (Sandbox Code Playgroud)

它抛弃了这个:

$VAR1 = {
      'deviceModel' => {
                         '' => {
                                 'cfg' => []
                               },
                         'Cisco1240' => {
                                        'cfg' => [
                                                 'cisco1240feature.cfg'
                                               ]
                                      },
                         'Catalyst3750' => { …

perl hash traversal

1
推荐指数
1
解决办法
1497
查看次数

在句子结尾处移动句点的正则表达式不是缩写

寻找有关如何删除句子中的句点字符但不删除缩写句点的一些想法.例如

"The N.J. turnpike is long. Today is a beautiful day."

将改为:

"The N.J. turnpike is long Today is a beautiful day"

regex perl pcre

1
推荐指数
1
解决办法
338
查看次数

Perl通过目录递归

基本上我要做的就是浏览目录并对所有文件执行操作,在本例中为子searchForErrors.这个子工作.到目前为止我所拥有的是:

sub proccessFiles{
    my $path = $ARGV[2];

    opendir(DIR, $path) or die "Unable to open $path: $!";
    my @files = readdir(DIR);
    @files = map{$path . '/' . $_ } @files;
    closedir(DIR);

    for (@files){
        if(-d $_){
            process_files($_);
        }
        else{
        searchForErrors;
    }
}
}

proccessFiles($path);
Run Code Online (Sandbox Code Playgroud)

任何帮助/建议都会很棒.而且,我是Perl的新手,所以解释越多越好.谢谢!

directory perl

1
推荐指数
1
解决办法
6100
查看次数

如何从Perl中的sub传递和返回哈希?

我一直在玩Perl中的哈希.以下按预期工作:

use strict;
use warnings;

sub cat {
        my $statsRef = shift;
        my %stats = %$statsRef;

        print $stats{"dd"};
        $stats{"dd"} = "DDD\n";
        print $stats{"dd"};
        return ("dd",%stats);
}

my %test;
$test{"dd"} = "OMG OMG\n";

my ($testStr,%output) = cat (\%test);
print $test{"dd"};

print "RETURN IS ".$output{"dd"} . " ORIG IS ". $test{"dd"};
Run Code Online (Sandbox Code Playgroud)

输出是:

OMG OMG
DDD
OMG OMG
RETURN IS DDD
 ORIG IS OMG OMG
Run Code Online (Sandbox Code Playgroud)

当我在混合中添加一个数组时,它会出错.

use strict;
use warnings;  sub cat {
        my $statsRef = shift;
        my %stats = %$statsRef;

        print $stats{"dd"}; …
Run Code Online (Sandbox Code Playgroud)

perl hash reference subroutine

1
推荐指数
1
解决办法
389
查看次数

在Perl中,如何查看目录以进行更改?

use Text::Diff;
for($count = 0; $count <= 1000; $count++){
   my $data_dir="archive/oswiostat/oracleapps.*dat";
   my $data_file= `ls -t $data_dir | head -1`;
   while($data_file){
      print $data_file;
      open (DAT,$data_file) || die("Could not open file! $!");
      $stats1 = (stat $data_file)[9];
      print "Stats: \n";
      @raw_data=<DAT>;
      close(DAT);
      print "Stats1 is :$stats1\n";
      sleep(5);
      if($stats1 != $stats2){
         @diff = diff \@raw_data, $data_file, { STYLE => "Context" };
         $stats2 = $stats1;
      }
      print @diff || die ("Didn't see any updates $!");
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ perl client_socket.pl
archive/oswiostat/oracleapps.localdomain_iostat_12.06.28.1500.dat
Stats:
Stats1 is …
Run Code Online (Sandbox Code Playgroud)

filesystems perl change-notification

1
推荐指数
1
解决办法
4878
查看次数

如何将共享数据传递给Perl中的线程?

use threads;
use threads::shared;

sub test {
    my $s :shared = 22;
    my $thread = threads->new(\&thrsub);

    $thread->join();
    print $s;

}

sub thrsub {
    $s = 33;
}

test;
Run Code Online (Sandbox Code Playgroud)

为什么不在线程中共享数据?

perl multithreading

1
推荐指数
1
解决办法
843
查看次数

Perl输出显示在终端的左侧?

奇怪的是,当我在Perl中执行代码时,输​​出总是出现在命令行的左侧.例如.

admin@admin-machine:~$ perl my_program
1 2 3 4 5 admin@admin-machine:~$
Run Code Online (Sandbox Code Playgroud)

如何让它在一行上显示输出,如下所示?

admin@admin-machine:~$ perl my_program
1 2 3 4 5
admin@admin-machine:~$
Run Code Online (Sandbox Code Playgroud)

linux perl ubuntu-10.04

1
推荐指数
1
解决办法
147
查看次数

在Perl中,何时在文字中使用胖逗号键/值语法而不是将其作为哈希类型结构?

我已经向我指出,("key" => "value", "key2" => "value2")不是一个哈希文字,而是一个列表,它的解释方式取决于你使用它的上下文.

我所知道的其他语言没有像这样的键/值语法,除了作者打算创建一个hash/map/associative-array/dictionary/etc之外,还可以用任何方式解释,所以我发现perl的这个方面有点难以掌握.

perl中有哪些上下文可以使用该语法而不打算创建这样的数据结构,其中它的工作方式是键/值对没有任何作用?

perl

1
推荐指数
1
解决办法
197
查看次数