小编Sin*_*nür的帖子

Perl输出显示在终端的左侧?

奇怪的是,当我在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)

linux perl ubuntu-10.04

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

如何将多个Perl单行合并到一个脚本中?

我想将几个单行内容移动到一个脚本中.

例如:

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)

非常感谢所有贡献的人.

string perl substitution

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

如何在Perl中对数字进行平方?

我有代码打印出前9个平方数字:

#!/usr/local/bin/perl

for($i=1;$i<10 ;$i++ )
{
   printf $i^2 . "\n";
}
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,这只输出30167451011.我如何正确地对数字进行平方?

perl loops

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

如何使用Perl中的正则表达式提取URL的一部分?

URL的一般格式是 scheme://domain:port/path?query_string#fragment_id

虽然域(以及URL的其他可能部分)可能包含Unicode字符,但在下文中我们假设仅使用ASCII字符.此外,我们假设

  • scheme只包含字母a–zA–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测试它是否按预期工作.

url perl

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

Perl:获得本月的最后一个星期五

我想要获得本月的最后一个星期五.我找到了可以完成这项工作的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)

perl date

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

为什么我从clock()获得的值与实时不同步?

我正在使用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)

c clock

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

为什么atoi会返回随机数?

我试图从文本文件中读取数据(时间).并将其转换为可以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)

c integer atoi

0
推荐指数
2
解决办法
816
查看次数

为什么通过ref需要转移而不是@_?

我有一个关于通过引用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)

perl

0
推荐指数
2
解决办法
116
查看次数

在Perl中,当我尝试递归遍历目录时,为什么我的目录句柄被关闭?

这是我的代码.我正在搜索重复的目录.我需要深度优先搜索.我使用递归,如果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)

directory recursion perl

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

如何使用foreach循环检查数组的哪些元素等于给定的字符串?

我的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)

perl foreach

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

标签 统计

perl ×8

c ×2

atoi ×1

clock ×1

date ×1

directory ×1

foreach ×1

integer ×1

linux ×1

loops ×1

recursion ×1

string ×1

substitution ×1

ubuntu-10.04 ×1

url ×1