use Data::Dump qw{dump}; $data = do { local $/ = undef; }; # in single call dump [ scalar( $data =~ tr[\n][\n] ), scalar($data =~ s/\n/\n/g), scalar($data =~ s/(\w+)/\1/g), length($data) ]; # in multiple calls dump [ scalar( $data =~ tr[\n][\n] ) ]; dump [ scalar($data =~ s/\n/\n/g) ]; dump [ scalar($data =~ s/(\w+)/\1/g) ]; dump [ length($data) ]; __DATA__ Line1 Word Something Line2 Other Word #### c:\test>783947.pl [6, 6, 6, 38] [2] [2] [6] [38] #### #! perl -sw use 5.010; $data = do { local $/ = undef; }; say join ':', scalar( $data =~ tr[\n][\n] ), scalar($data =~ s/\n/\n/g), scalar($data =~ s/(\w+)/$1/g), length($data) ; my $x = [ scalar( $data =~ tr[\n][\n] ), scalar($data =~ s/\n/\n/g), scalar($data =~ s/(\w+)/$1/g), length($data) ]; say "@$x"; __DATA__ Line1 Word Something Line2 Other Word #### c:\test>783947.pl Use of uninitialized value in join or string at ... 6::6:38 6 6 6 38