小编Nik*_*ain的帖子

如何将系统命令的结果存储在Perl变量中?

$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Run Code Online (Sandbox Code Playgroud)

我想将结果捕获11到变量中.我怎样才能做到这一点?

perl command system

22
推荐指数
3
解决办法
10万
查看次数

这个着名的JAPH如何运作?

not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf …
Run Code Online (Sandbox Code Playgroud)

perl

21
推荐指数
2
解决办法
3125
查看次数

Perl,如何确定变量值是否为数字?

是否有一种独特的方法来确定变量值是否为数字,因为这些值也可以是科学记数法(例如,5.814e-10)?

regex perl numbers perl-module

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

Perl:数组引用与匿名数组

这可能是一个愚蠢的问题...下面的代码输出的内容@arrayref@arraycont分别.请注意它们之间的差异以及它们的值的分配方式.我知道匿名数组的作用,但有人可以解释为什么会有区别吗?

非常感谢你.

@arrayref = ();
@array = qw(1 2 3 4);
$arrayref[0] = \@array;
@array = qw(5 6 7 8);
$arrayref[1] = \@array;
print join "\t", @{$arrayref[0]}, "\n";
print join "\t", @{$arrayref[1]}, "\n";

@arraycont = ();
@array = qw(1 2 3 4);
$arraycont[0] = [@array];
@array = qw(5 6 7 8);
$arraycont[1] = [@array];
print join "\t", @{$arraycont[0]}, "\n";
print join "\t", @{$arraycont[1]}, "\n";
Run Code Online (Sandbox Code Playgroud)

输出

5   6   7   8   
5   6   7   8   
1   2   3 …
Run Code Online (Sandbox Code Playgroud)

arrays perl

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

可以在不首先声明变量的情况下进行引用吗?

我有这个代码有效

my @new = keys %h1;
my @old = keys %h2;

function(\@new, \@old);
Run Code Online (Sandbox Code Playgroud)

但是可以在不必先声明变量的情况下完成吗?

function必须将其参数作为参考.

arrays perl hash reference perl-data-structures

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

需要更多关于如何使用Spreadsheet :: ParseExcel的示例

我一直在使用Spreadsheet :: ParseExcel列出电子表格的内容.我已经看到了几个关于如何转储整个电子表格的例子.我真的很想看看如何更有选择地使用这个脚本.

以下来自IBM的示例基本上转储了具有数据的所有单元格的内容.

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $oExcel = new Spreadsheet::ParseExcel;

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;

my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE  :", $oBook->{File} , "\n";
print "COUNT :", $oBook->{SheetCount} , "\n";

print "AUTHOR:", $oBook->{Author} , "\n"
 if defined $oBook->{Author};

for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
 $oWkS = $oBook->{Worksheet}[$iSheet];
 print "--------- SHEET:", $oWkS->{Name}, "\n";
 for(my $iR …
Run Code Online (Sandbox Code Playgroud)

csv excel perl cpan spreadsheet

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

使用Perl获取硬盘信息

我想用perl来检查Windows上的硬盘空间,有什么办法吗?

最好的祝福,

windows perl

5
推荐指数
2
解决办法
3333
查看次数

为什么我的哈希不是undef?

我在Perl中有以下(从错误中理想化)短脚本:

my %metadata = undef;
if (defined %metadata)
{
    print "defined";
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,程序的输出总是"定义".因此,将哈希值设置为"未定义"会使其定义.它被定义为"未定义"吗?

编辑:

这是一个理想化的案例,试图复制问题.我实际上做的更像是:

my %metadata = my_sub_function();
if (defined %metadata)
{
    print "defined";
}
Run Code Online (Sandbox Code Playgroud)

my_sub_function的输出可能是undef,()或填充的哈希,我只想在最后一种情况下打印"已定义".

编辑2:

顺便说一句,我发现了

if (scalar(keys %metadata)
Run Code Online (Sandbox Code Playgroud)

行为正确的(),但仍然不适用于undef.

perl hash

5
推荐指数
2
解决办法
1736
查看次数

排序数组,它是Perl中Hash中的值

我正在尝试对数组进行排序,该数组哈希值.以下代码行:

sort @{ $hash{$item}{'lengths'} };
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

Useless use of sort in void context at ...
Run Code Online (Sandbox Code Playgroud)

arrays sorting perl hash

5
推荐指数
2
解决办法
2941
查看次数

Perl阅读巨大的excel文件

我有一个巨大的xlsx文件(大约127 MB),并希望使用Spreadsheet::Excel模块阅读,但我在2GB RAM机器上得到" Out of Memory"错误.(注意脚本适用于较小的excel 2007文件)

有没有办法在不达到内存限制的情况下逐行读取excel文件.搜索谷歌我遇到了http://discuss.joelonsoftware.com/default.asp?joel.3.160328.14,但我并不熟悉如何将电子表格存储到标量中.有人可以将excel 2007文件作为标量和打印单元格值进行读取.下面是我在较小的电子表格上运行的当前脚本.

#!/usr/bin/perl
use Excel::Writer::XLSX;
use Spreadsheet::XLSX;
my $workbook  = Excel::Writer::XLSX->new('Book1.xlsx');
my $worksheet = $workbook->add_worksheet();
#  use strict;
my $excel = Spreadsheet::XLSX -> new ('Book2.xlsx');
my $date_format = $workbook->add_format();
$date_format->set_num_format('dd/mm/yy hh:mm');
# Columns of interest
@columns=(0,1,2,5,9,10,12,13,31);
@reportlist=("string1","String2","String3");
@actuallist=("ModifiedString1","ModifiedString2","ModifiedString3");
$max_list=$#reportlist;
foreach my $sheet (@{$excel -> {Worksheet}}) {
    printf("Sheet: %s\n", $sheet->{Name});
    $sheet -> {MaxRow} ||= $sheet -> {MinRow};
        foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) …
Run Code Online (Sandbox Code Playgroud)

excel perl spreadsheet

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