小编Phi*_* A.的帖子

一次读取一个ARGV文件

我希望用ARGV指定的每个(小)文件都在自己的数组中读取.如果我不测试$ARGV,<>将在单个表中啜饮所有文件.这样做有更好/更短/更简单的方法吗?

# invocation: ./prog.pl *.txt

@table = ();
$current = "";
while (<>)
{
  if ($ARGV ne $current)
  {
    @ar = ();
    $current = $ARGV;
    if ($current)
    {
      push @table, \@ar;
    }
  }
  push @ar;
}
Run Code Online (Sandbox Code Playgroud)

perl

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

如何在BEGIN块之外正确声明哈希?

考虑这个简单的程序.你能解释为什么在取消注释前两行之后输出会有所不同吗?我的哈希发生了什么use strict?如何修复程序使用use strict

echo -e "key1\nkey2\nkey3" | perl -lne '
  #use strict; use warnings;
  #my %hash;
  BEGIN { 
    $hash{'key3'} = "value";
  }   
  chomp;
  if ($hash{$_}) {
    print "$_ matched";
  } else {
    print "$_ unmatched ";
  }
'
Run Code Online (Sandbox Code Playgroud)

输出:

key1 unmatched 
key2 unmatched 
key3 matched
Run Code Online (Sandbox Code Playgroud)

perl

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

config中的req_extensions和命令行上的-extensions有什么区别?

OpenSSL Cookbook中的示例openssl root ca config 定义了以下内容(p40):

[req]
...
req_extensions = ca_ext

[ca_ext]
...
Run Code Online (Sandbox Code Playgroud)

稍后(p43),生成根ca密钥,然后生成root ca自签名证书.

openssl req -new \
-config root-ca.conf \
-out root-ca.csr \
-keyout private/root-ca.key

openssl ca -selfsign \
-config root-ca.conf \
-in root-ca.csr \
-out root-ca.crt \
-extensions ca_ext
Run Code Online (Sandbox Code Playgroud)

在这个特定的用例中,req_extensions不是多余的吗?什么时候真的需要req_extension?

openssl csr x509 pkcs#10

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

迭代Perl数组的最有效方法是什么?

我正在阅读一个有序的文件,我必须按小时,按分钟或按秒出现.如果需要,我必须打印出现0次(标准化输出)或跳过它们(非标准化输出).显然必须订购输出.

我首先想到使用数组.当输出未标准化时,我大致相当于:

@array[10] = 100;
@array[10000] = 10000;
Run Code Online (Sandbox Code Playgroud)

并打印结果:

foreach (@array) {
  print if defined;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将迭代减少到只有数组中定义的元素?在前面的示例中,这意味着只执行两次迭代,而不是使用$#array含义的10000次迭代.然后我还需要一种方法来了解循环中的当前数组索引.这样的事情存在吗?

我正在考虑越来越多地使用哈希.使用哈希解决了我的问题,也消除了将hh:mm:ss转换为索引的需要,反之亦然.

或者你有一个更好的解决方案来建议这个简单的问题?

perl

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

Modulino包名添加到@_

考虑以下基本Perl modulino:

#!/usr/bin/perl -l
package Toto;

__PACKAGE__->run(@ARGV) unless caller();

sub run 
{
  print "@ARGV";
  print "@_";
}

1;
Run Code Online (Sandbox Code Playgroud)

如果我在命令行上运行它,我得到:

$ ./Toto.pm 1 2 3
1 2 3
Toto 1 2 3
Run Code Online (Sandbox Code Playgroud)

如果我从测试中调用它:

$ perl -MToto -le 'Toto::run(1,2,3)'    
#first line blank - no ARGV set
1 2 3
Run Code Online (Sandbox Code Playgroud)

换句话说,@_ inside run()的内容会根据函数的调用方式而改变.

你能解释一下发生了什么吗?

perl modulino

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

标签 统计

perl ×4

csr ×1

modulino ×1

openssl ×1

pkcs#10 ×1

x509 ×1