【问题标题】:How can I use Perl to incrementally print a string?如何使用 Perl 增量打印字符串?
【发布时间】:2011-11-19 14:40:50
【问题描述】:
my $line2 = ("My cat Garfield");
my $leng2 = length $line2;
my $longmatch;
my $post = 0;
my $letter = 1; 

for(my $post = 0; $post < $leng2; $post++) {
    for($letter = 1; $letter <= $leng2; $letter++) {
        $longmatch = (substr($line2,$post,$letter));
        print $longmatch,  "\n";    
    }   
}

如何消除重复的线条??

【问题讨论】:

  • 您想打印多行,每行都比前一行长,还是一次打印一个字符(慢慢地)?贴出你的代码,会更容易理解...

标签: perl substring substr


【解决方案1】:

使用 C 风格的循环 -- for (my $i = 0; $i &lt; 10; $i++) -- 不是 perl 的方式。只需改用for my $i (0 .. 10)

在本例中,我在后脚本循环中使用隐式变量$_,并使用say 代替 print 来获得自动换行符结尾:

use v5.10; # used to enable feature say
my $cat = 'my cat is Garfield'; 
say substr($cat, 0, $_) for 1 .. length($cat);

【讨论】:

    【解决方案2】:

    您的 substr() 参数可能是错误的。

    my $x = "my cat is Garfield";
    for (my $i = 1; $i <= length($x); $i++) {
        print substr($x, 0, $i) . "\n";
    }
    

    【讨论】:

      【解决方案3】:
      my $a= 'my cat is Garfield';
      
      for(my$i = 0; $i <= length($a); ++$i)
      {
          printf("%.*s\n", $i, $a);
      }
      

      【讨论】:

        【解决方案4】:
        print substr( $str, 0, $_ ), "\n" foreach 1..( length $str );
        

        【讨论】:

          【解决方案5】:

          假设当您说“我怎样才能消除重复的行??”时,您的意思是“消除看起来与前一行相同的行,因为它们有一个尾随空格”,以下可能会满足您的要求。请注意,我无耻地复制了以前的贡献,以试图获得答案:)

          use v5.10; # used to enable feature say
          
          my $cat = 'my cat is Garfield';
          my $last = "";
          
          for (1 .. length($cat) ){
              my $text = substr($cat, 0, $_);
          
              my $trim = $text;
              $trim =~ s/\s+$//;
          
              say $trim unless ($trim eq $last);
              $last = $trim;
          }
          

          【讨论】:

            【解决方案6】:
            my $a = "your string";
            map { print substr($a, 0, $_) . "\n" } (1..length($a));
            

            【讨论】:

            • 避免在 void 上下文中使用 map(这就是 for 循环的用途)
            • @Zaid 也适用于grepgrep { say substr($a, 0, $_) } =)
            • @TLP : 我们不要给人们有趣的想法:|
            • @Zaid 感谢您指出这一点。在 void 上下文中调用 map 是一种草率的编程。
            猜你喜欢
            • 1970-01-01
            • 2011-05-05
            • 1970-01-01
            • 1970-01-01
            • 2014-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-31
            相关资源
            最近更新 更多