dibonao
dibonao

Reputation: 85

perl number of lines in a string

Using perl, is there any single command which give me the number of lines inside a string?

my $linenum= .... $str ....

It should work for when the string is empty, single line, and multiple lines.

Upvotes: 6

Views: 5472

Answers (3)

marinara
marinara

Reputation: 538

I've adapted @rplantiko's answer into a full subroutine that works the way I picture it, with handling for undef and "". It also knows about how the last line of text can be missing a "\n" and returns the apparent line count ( which is the count of "\n" +1 )

# should work on windows + unix but not the old mac
sub count_lines_in_string { 
    $_ = shift;
    return 0 if( !defined $_ or $_ eq "");
    my $lastchar = substr $_, -1,1;
    my $numlines = () = /\n/g;
# was last line a whole line with a "\n"?;
    return $numlines + ($lastchar ne "\n"); 
}
say count_lines_in_string("asdf\nasdf\n") ;
say count_lines_in_string undef;
say count_lines_in_string "a";

Upvotes: 0

mpapec
mpapec

Reputation: 50637

You can count number of newline chars \n in the string (or \r for Mac newline)

my $linenum = $str =~ tr/\n//;

Upvotes: 13

Eadhun Di
Eadhun Di

Reputation: 132

Try to use a regular expression

Upvotes: -6

Related Questions