The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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
}