@@ -337,10 +337,17 @@ yaml_syck_parser_handler
337337 char * type = strtok (NULL , "" );
338338
339339 if (lang == NULL || (strEQ (lang , "perl" ))) {
340- sv = newSVpv (type , 0 );
340+ if (type != NULL ) {
341+ sv = newSVpv (type , 0 );
342+ } else {
343+ /* Tag has no type component (e.g. "!perl =") —
344+ * fall back to raw scalar content */
345+ sv = newSVpvn (n -> data .str -> ptr , n -> data .str -> len );
346+ CHECK_UTF8 ;
347+ }
341348 }
342349 else {
343- sv = newSVpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), 0 );
350+ sv = newSVpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), 0 );
344351 }
345352 Safefree (id_copy );
346353 } else if ( strEQ ( id , "perl/scalar" ) || strnEQ ( id , "perl/scalar:" , 12 ) ) {
@@ -396,7 +403,7 @@ yaml_syck_parser_handler
396403 }
397404 }
398405 else {
399- sv_bless (sv , gv_stashpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), TRUE));
406+ sv_bless (sv , gv_stashpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), TRUE));
400407 }
401408 }
402409 Safefree (id_copy );
@@ -453,7 +460,7 @@ yaml_syck_parser_handler
453460 }
454461 }
455462 else {
456- sv_bless (sv , gv_stashpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), TRUE));
463+ sv_bless (sv , gv_stashpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), TRUE));
457464 }
458465 }
459466 Safefree (id_copy );
@@ -501,7 +508,7 @@ yaml_syck_parser_handler
501508 }
502509 }
503510 else {
504- sv_bless (sv , gv_stashpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), TRUE));
511+ sv_bless (sv , gv_stashpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), TRUE));
505512 }
506513 Safefree (id_copy );
507514 }
@@ -551,7 +558,7 @@ yaml_syck_parser_handler
551558 }
552559 }
553560 else {
554- sv_bless (sv , gv_stashpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), TRUE));
561+ sv_bless (sv , gv_stashpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), TRUE));
555562 }
556563 Safefree (id_copy );
557564 }
@@ -610,7 +617,7 @@ yaml_syck_parser_handler
610617 sv_bless (sv , gv_stashpv (type , TRUE));
611618 }
612619 } else {
613- sv_bless (sv , gv_stashpv (form (( type == NULL ) ? "%s" : "%s::%s" , lang , type ), TRUE));
620+ sv_bless (sv , gv_stashpv (( type == NULL ) ? lang : form ( "%s::%s" , lang , type ), TRUE));
614621 }
615622 }
616623 Safefree (id_copy );
0 commit comments