use Test::More; require XSLoader; # Disable "once" warnings BEGIN { my $ok = eval { require warnings; 1 }; if ( $ok ) { warnings->unimport( qw( once redefine ) ); } else { $^W = 0; } } my @tests = ( [ 'start=no:file=nytprof.out' => { start => 'no', file => 'nytprof.out' } ], [ 'start=no:file=nytprof\:out' => { start => 'no', file => 'nytprof:out' } ], [ 'start=no:file=nytprof\=out' => { start => 'no', file => 'nytprof=out' } ], ); plan( tests => 1 * @tests ); for my $test ( @tests ) { my ( $nytprof, $expected ) = @$test; # Abrogate the XSLoader used to load the XS function DB::set_option. local *XSLoader::load = sub {}; # Hook the function used to set options to capture it's parsing. my %got; local *DB::set_option = sub { my ( $k, $v ) = @_; $got{$k} = $v; }; # (pretend to) Unload the class. delete $INC{'Devel/NYTProf/Core.pm'}; # Test the class's parsing. local $ENV{NYTPROF} = $nytprof; require Devel::NYTProf::Core; is_deeply( \%got, $expected, "Parsed \$ENV{NYTPROF}='$nytprof' ok" ); }