奇怪的是,当我在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) 我想将几个单行内容移动到一个脚本中.
例如:
perl -i.bak -pE "s/String_ABC/String_XYZ/g" Cities.Txt
perl -i.bak -pE "s/Manhattan/New_England/g" Cities.Txt
Run Code Online (Sandbox Code Playgroud)
以上对我来说效果很好,但代价是两个磁盘I/O操作.
我想将上述逻辑移动到一个脚本中,以便所有替换都在文件打开和编辑一次的情况下完成.
编辑1:根据您的建议,我在一个脚本中编写了这个片段,当从Windows批处理文件调用时,它只是挂起:
#!/usr/bin/perl -i.bak -p Cities.Txt
use strict;
use warnings;
while( <> ){
s/String_ABC/String_XYZ/g;
s/Manhattan/New_England/g;
print;
}
Run Code Online (Sandbox Code Playgroud)
编辑2:好的,所以这是我实施你的建议的方式.奇迹般有效!
批处理文件:
perl -i.bal MyScript.pl Cities.Txt
Run Code Online (Sandbox Code Playgroud)
MyScript.pl
#!/usr/bin/perl
use strict;
use warnings;
while( <> ){
s/String_ABC/String_XYZ/g;
s/Manhattan/New_England/g;
print;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢所有贡献的人.
我有代码打印出前9个平方数字:
#!/usr/local/bin/perl
for($i=1;$i<10 ;$i++ )
{
printf $i^2 . "\n";
}
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,这只输出30167451011.我如何正确地对数字进行平方?
URL的一般格式是
scheme://domain:port/path?query_string#fragment_id
虽然域(以及URL的其他可能部分)可能包含Unicode字符,但在下文中我们假设仅使用ASCII字符.此外,我们假设
scheme只包含字母a–z和A–Z;domain不包含:,?,#或/;port是一个自然数,:port是可选的;path不包含?或#,path是可选的;query_string不包含#,?query_string是可选的;fragment_id可以包含任意字符,#fragment_id是可选的.
这是我的代码:
@urls = (
"http://www.example.com/",
"http://www80.local.com:80/",
"https://www.ex221.ac.uk:442/perl/rulez?all+q#all.time");
foreach (@urls) {
print "URL: $_\n";
($scheme,$domain,$port,$path,$query,$fragment) = (/(.)(.)(.)(.)(.)(.)/);
print "SCHEME: $scheme, DOMAIN: $domain, PORT: $port\n";
print "PATH: $path\n"; print "QUERY: $query\n";
print "FRAGMENT: $fragment\n\n";
}
Run Code Online (Sandbox Code Playgroud)
如何更改上面代码中的正则表达式,以便正确分隔URL的五个组件并使用示例URL测试它是否按预期工作.
我想要获得本月的最后一个星期五.我找到了可以完成这项工作的awtome awk脚本.我尝试将其移植到perl但面临一些问题.任何见解都会有很大的帮助.我不能使用除内置模块之外的任何perl模块,这就是为什么我必须完成构建这些东西.
谢谢你的帮助.
AWK脚本:
BEGIN {
split("31,28,31,30,31,30,31,31,30,31,30,31",daynum_array,",") # days per month in non leap year
year = ARGV[1]
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
daynum_array[2] = 29
}
y = year - 1
k = 44 + y + int(y/4) + int(6*(y/100)) + int(y/400)
for (m=1; m<=12; m++) {
k += daynum_array[m]
d = daynum_array[m] - (k%7)
printf("%04d-%02d-%02d\n",year,m,d)
}
exit(0)
}
Run Code Online (Sandbox Code Playgroud)
我的Perl脚本:
my @time = localtime;
my …Run Code Online (Sandbox Code Playgroud) 我正在使用clock()C中的函数来获取秒数,但是通过这个小测试程序,我发现我的处理器没有正确计算滴答,因为秒太多与实时不同步,另外我不得不将结果乘以100得到更接近秒的东西,但我认为它没有意义.在这个程序中,10s几乎相当于现实生活中的7s.有人能帮助我clock()更精确地成为这个功能吗?
我正在使用Beaglebone Black rev C,内核为3.8.13-bone70,Debian为4.6.3-14,gcc为4.6.3
提前致谢!
这是我的测试程序:
#include <stdio.h>
#include <time.h>
int main(){
while(1)
printf("\n%f", (double)100*clock()/CLOCKS_PER_SEC);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我试图从文本文件中读取数据(时间).并将其转换为可以DiffTime到当前系统时间的东西.
我现在已经非常接近正常工作,我可以品尝它,但我遇到了一个我无法解决的问题.(我对C语言有一个非常基本的把握).
此程序从文本文件中读取数据,将其拆分为两个char数组,然后尝试将atoi其转换为整数.但是,我在第二次atoi通话时遇到问题.
从最下面的两个printf陈述,我应该得到:
12 34
但由于某种原因,我得到了这些方面的东西.
12 3412
我认为它atoi超出了其中一个char数组的边界,或者我的char数组太长或太短.无论哪种方式,我都无法理解正在发生的事情.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define COPYMODE 0644
int main (int argc, char *argv[]){
int i, nRead, fd;
int source;
int ihour;
int imin;
int STATE_OK = 0;
int STATE_WARNING = 1;
int STATE_CRITICAL = 2;
int STATE_UNKNOWN = 3;
/* indicates if system is paused 1 = System is paused, 0 = System running …Run Code Online (Sandbox Code Playgroud) 我有一个关于通过引用Perl中的子例程的问题.对于值,如果我使用@_传递它可以工作但是对于ref只有shift工作.不知道为什么.我有以下示例代码:
这有效:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef( \$name );
sub PassScalarByRef{
my $got = shift;
print "Hello $$got\n";
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef( \$name );
sub PassScalarByRef{
my $got = @_;
print "Hello $$got\n";
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码.我正在搜索重复的目录.我需要深度优先搜索.我使用递归,如果DH看到一个文件夹,那么它会查找该文件夹.但完成此文件夹后DH处理关闭和程序不会查看顶级文件夹的剩余部分.
#! /usr/bin/perl
use Digest::MD5;
dtraverse(@ARGV) ;
sub dtraverse {
my $fullpathname ;
my @subdirlist ;
my @filelist2 ;
my $newpath ;
my $name ;
my $d ;
print "entered nnnn\n";
$fullpathname = $_[0];
opendir(DH,$fullpathname) or die("Cannot open directory\n");
@subdirlist = () ;
@filelist2 = () ;
while ($name = readdir(DH) ) {
next if (($name eq ".") or ($name eq "..") );
$newpath = $fullpathname . "/" . $name ;
print "asdasd == $name\n";
if (-d $newpath ) { …Run Code Online (Sandbox Code Playgroud) 我的foreach循环不能按照我的意愿工作.我希望它循环遍历数组,并找到一个元素存在的时间和元素不存在的时间.但是,我得到了所有人的说法Not an apple.
@fruit = ('apple','orange','pear');
foreach(@fruit){
if(@fruit != 'apple'){
print "Not an apple\n";
}
else{
print "Is an apple\n";
}
}
Run Code Online (Sandbox Code Playgroud)