$ 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到变量中.我怎样才能做到这一点?
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) 是否有一种独特的方法来确定变量值是否为数字,因为这些值也可以是科学记数法(例如,5.814e-10)?
这可能是一个愚蠢的问题...下面的代码输出的内容@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) 我有这个代码有效
my @new = keys %h1;
my @old = keys %h2;
function(\@new, \@old);
Run Code Online (Sandbox Code Playgroud)
但是可以在不必先声明变量的情况下完成吗?
function必须将其参数作为参考.
我一直在使用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) 我在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.
我正在尝试对数组进行排序,该数组是哈希值.以下代码行:
sort @{ $hash{$item}{'lengths'} };
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
Useless use of sort in void context at ...
Run Code Online (Sandbox Code Playgroud) 我有一个巨大的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)