use strict; use warnings; use SQL::Exec::SQLite ':all'; use Test::Subs; { package Local::Foo; sub replace { $_[1] =~ s/1/4/; $_[1] } } my $r = bless [], 'Local::Foo'; test { connect(':memory:'); }; test { query_one_value('select 1', { replace => sub { s/1/2/ } }) == 2 }; test { query_one_value('select 1', { replace => { 1 => 3 } }) == 3 }; test { query_one_value('select 1', { replace => $r }) == 4 }; test { replace(1 => 5); query_one_value('select 1') == 5 }; test { query_one_value('select 1', { replace => 0 }) == 1 }; test { replace(String::Replace->new(table_name => 't')); execute('create table table_name (a)'); replace(table_name => 't'); execute('insert into table_name values (1)'); query_one_value('select * from table_name', { replace => sub { s/table_name/t/g } }) == 1 }