我正在尝试创建一个程序来计算数据文件列中出现的不同值.所以,如果列的可能值是A,B,C,那就像是这样的.输出类似于
A 456
B 234
C 344
Run Code Online (Sandbox Code Playgroud)
通过做这样的事情,我已经能够轻松获得A,B和C的运行计数
my %count;
for my $f (@ffile) {
open F, $f || die "Cannot open $f: $!";
while (<F>) {
chomp;
my @U = split / /;
$count{$U[2]}++;
}
}
foreach my $w (sort keys %count) {
printf $w\t$count{$w};
}
Run Code Online (Sandbox Code Playgroud)
例如,我在计算给定路径中的文件的第二列.
如何通过计数而不是键(或值A,B,C)对printf的输出进行排序 -
A 456
C 344
B 234
Run Code Online (Sandbox Code Playgroud) 我的目标是调试(逐步)sample.pl下面的脚本.
问题:我没有得到变量的实际值($ top_number,$ x,$ total).
我的问题:如何从跟踪输出中查看($ top_number,$ x,$ total)的实数整数值?
perl -d:Trace为了得到数字需要改变什么,而不是:$ top_number,$ x,$ total?
跟踪输出示例:
[root@linux /tmp]# perl -d:Trace ./sample.pl
>> ./sampl.pl:9: $top_number = 100;
>> ./sampl.pl:10: $x = 1;
>> ./sampl.pl:11: $total = 0;
>> ./sampl.pl:12: while ( $x <= $top_number ) {
>> ./sampl.pl:13: $total = $total + $x; # short form: $total += $x;
>> ./sampl.pl:14: $x += 1; # do you follow this short form?
>> ./sampl.pl:13: $total = $total + $x; # …Run Code Online (Sandbox Code Playgroud) 你能解释为什么perl开关-en不起作用,但-ne工作正常吗?
$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$
Run Code Online (Sandbox Code Playgroud)
您能否提供一个文档的链接,描述这种行为?
在我的脚本to_json()中以json格式转换loop_data并分配给$ json.
my $json = to_json(\@loop_data);
print $json;
Run Code Online (Sandbox Code Playgroud)
给出了这个输出.
[
{
"Name": "Vivek",
"Age": 20
},
{
"Name": "Sonali",
"Age": 19
}
]
Run Code Online (Sandbox Code Playgroud)
但不是我想要打印$ json来提供此输出.
{"Friends" : [
{
"Name": "Vivek",
"Age": 20
},
{
"Name": "Sonali",
"Age": 19
}
]}
Run Code Online (Sandbox Code Playgroud)
在哪里添加"朋友"和{}.
这是在 perldoc 中找到的示例:
$object->expect(15, '-re', "$str");
Run Code Online (Sandbox Code Playgroud)
我想将选项“i”添加到匹配中。这是行不通的:
$object->expect(15, '-re', qr/$str/i);
Run Code Online (Sandbox Code Playgroud)
我必须使用这种格式吗:
$exp->expect($timeout, [ qr/$str/i, sub {}], $shell_prompt);
Run Code Online (Sandbox Code Playgroud) 我有以下字符串:
Data 250 MB
Data 1.5 GB
Data 10 GB
Run Code Online (Sandbox Code Playgroud)
我只需捕获值250 MB, 1.5 GB, 10 GB.所以我写了这个表达
(my $data) = $str1 =~ /Data (\S+ GB|MB)/ or die "$str1\n";
这适用于GB中的数据,但对于MB,我得到了结果Data 250 MB.任何人都可以解释原因吗?
据我所知,perltidy在代码格式化方面非常方便和有帮助。不过我还没有找到微调的方法perltidy。例如,我需要对&&和||进行格式化,以便在它们之前和之后有两个空格。像这样:
$some && $x > 7;
我可以做吗?如果是这样,怎么办?
我正在使用Perl中的一个小脚本,我在命令行中遇到参数问题.我正在使用GetOps来解析它们,如下面的代码所示:
%params = (
"help" => "",
"no_inline" => "",
"no_dupl" => ""
);
¶mError if (!GetOptions(
"help" => \$params{"help"},
"no-inline" => \$params{"no_inline"},
"no-duplicates" => \$params{"no_dupl"},
));
Run Code Online (Sandbox Code Playgroud)
然后我像这样运行脚本:
> script.pl --no-inline # ok, valid parameter
> script.pl --no-inline blahblah # blahblah is not valid
> script.pl --no-i # not valid
Run Code Online (Sandbox Code Playgroud)
问题是,在第二个和第三个示例中,GetOps表示参数有效.我该怎么办才能使这些参数无效?
我尝试将模块输出连接到寄存器,如下所示:
module test
(
input rst_n,
input clk,
output reg [7:0] count
);
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
count <= 7'h0;
end else begin
if(count == 8) begin
count <= count;
end else begin
count <= count + 1'b1;
end
end
end
endmodule
module test_tb;
reg clk;
reg rst_n;
reg [7:0] counter;
initial begin
clk = 1'b0;
rst_n = 1'b0;
# 10;
rst_n = 1'b1;
end
always begin
#20 clk <= ~clk;
end
test test1 ( …Run Code Online (Sandbox Code Playgroud) 我有一个包含一些整数的数组,我想将其转换为十六进制格式的字符串。这是我使用的代码,并且运行良好。我只是想知道是否有更简单的方法来做到这一点。
my @arr = get_tw() ; ##array of integer
for(my $i=0;$i<@arr;$i++){
$arr[$i]= sprintf('%02x',$arr[$i]); ##overwrite with the hex value
}
my $string = join('',@arr); ##build a string from a array
Run Code Online (Sandbox Code Playgroud)