Как я могу использовать Perl для постепенной печати строки? - PullRequest
3 голосов
/ 19 ноября 2011
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";    
    }   
}

Как я могу устранить повторяющиеся строки ??

Ответы [ 6 ]

6 голосов
/ 19 ноября 2011

Использование циклов в стиле C - for (my $i = 0; $i < 10; $i++) - не лучший способ.Просто используйте 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);
3 голосов
/ 19 ноября 2011

Возможно, ваши аргументы substr () неверны.

my $x = "my cat is Garfield";
for (my $i = 1; $i <= length($x); $i++) {
    print substr($x, 0, $i) . "\n";
}
1 голос
/ 21 ноября 2011

Предполагая, что когда вы говорите «Как я могу удалить повторяющиеся строки?», Вы имеете в виду «исключить строки, которые выглядят так же, как и предыдущая строка, потому что у них есть завершающий пробел», следующее может сделать то, что вы хотите. Обратите внимание, что я бесстыдно скопировал предыдущий вклад в печальной попытке получить награду:)

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;
}
1 голос
/ 19 ноября 2011
print substr( $str, 0, $_ ), "\n" foreach 1..( length $str );
1 голос
/ 19 ноября 2011
my $a= 'my cat is Garfield';

for(my$i = 0; $i <= length($a); ++$i)
{
    printf("%.*s\n", $i, $a);
}
0 голосов
/ 19 ноября 2011
my $a = "your string";
map { print substr($a, 0, $_) . "\n" } (1..length($a));
...