#!perl -T use strict; use Test::More; use File::Slurp; plan 'skip_all', "Scalar::Util not available" unless eval 'use Scalar::Util qw(tainted) ; tainted($0) ; 1'; plan 'tests', 5; my $path = "data.txt"; my $data = "random junk\nline2"; SKIP: { # write something to that file open(FILE, ">$path") or skip 4, "can't write to '$path': $!"; print FILE $data; close(FILE); # read the file using File::Slurp in scalar context my $content = eval { read_file($path) }; is( $@, '', "read_file() in scalar context" ); ok( tainted($content), " => returned content should be tainted" ); # # reconstruct the full lines by merging items by pairs # for my $k (0..int($#lines/2)) { # my $i = $k * 2; # $lines[$k] = (defined $lines[$i] ? $lines[$i] : '') # . (defined $lines[$i+1] ? $lines[$i+1] : ''); # } # # remove the rest of the items # splice(@lines, int($#lines/2)+1); # pop @lines unless $lines[-1]; # $_ .= $/ for @lines ; # my @lines = split m{$/}, $content, -1; # my @parts = split m{($/)}, $content, -1; # # my @parts = $content =~ m{.+?(?:$/)?}g ; # my @lines ; # while( @parts > 2 ) { # my( $line, $sep ) = splice( @parts, 0, 2 ) ; # push @lines, "$line$sep" ; # } # push @lines, shift @parts if @parts ; # # ok( tainted($lines[0]), " text => returned content should be tainted" ); # read the file using File::Slurp in list context my @content = eval { read_file($path) }; is( $@, '', "read_file() in list context" ); ok( tainted($content[0]), " => returned content should be tainted" ); my $text = join( '', @content ) ; is( $text, $content, "list eq scalar" ); # ok( tainted($lines[0]), " => returned content should be tainted" ); } unlink $path;