use strict; use warnings; use Inline C => <<'__EOI__'; static const char* test1_str = "Hello, "; static int test1_mg_get(pTHX_ SV *sv, MAGIC *mg) { sv_setpvn(sv, test1_str, (STRLEN)strlen(test1_str)); return 0; } static const MGVTBL vtbl_test1 = { test1_mg_get, NULL, NULL, NULL, NULL }; SV* get_test1_var() { SV* sv = newSV_type(SVt_PVLV); sv_magicext(sv, NULL, PERL_MAGIC_ext, &vtbl_test1, NULL, 0); return sv; } static const char* test2_str = "World!"; static int test2_mg_get(pTHX_ SV *sv, MAGIC *mg) { sv_setpvn(sv, test2_str, (STRLEN)strlen(test2_str)); return 0; } static const MGVTBL vtbl_test2 = { test2_mg_get, NULL, NULL, NULL, NULL }; SV* get_test2_var() { SV* sv = newSV_type(SVt_PVLV); sv_magicext(sv, NULL, PERL_MAGIC_ext, &vtbl_test2, NULL, 0); return sv; } __EOI__ use Devel::Peek qw( Dump ); my $test1 = get_test1_var(); my $test2 = get_test2_var(); print("$test1$test2\n");