このようなものはうまくいくはずです:
__PACKAGE__->has_many( baubles => 'My::Schema::Result::Thing', sub {
my $args = shift;
return ({
"$args->{foreign_alias}.weirdkey" => \"substr($args->{self_alias}.key, 1, 9)",
},
$args->{self_rowobj} && {
"$args->{foreign_alias}.weirdkey" => substr($args->{self_rowobj}->key, 1, 9)
})
});
現在の行オブジェクトがある場合は、perl の substr を使用することに注意してください。そのため、結合は単なる where 句に折りたたまれ、文字列変更にデータベースは使用されません。問題がある場合は、それを削除するか、いじってください。DBIC_TRACE は、何が起こっているかを明確にする必要があります。
ドキュメントはこちら: https://metacpan.org/pod/DBIx::Class::Relationship::Base#condition