Я пишу вещь для вывода чего-то похожего на JSON, из структуры perl. Я хочу процитировать вести себя так:Есть ли способ проверить, был ли скаляр сканирован или нет?
"string" outputs "string"
"05" outputs "05"
"5" outputs "5"
5 outputs 5
05 outputs 5, or 05 would be acceptable
JSON :: XS обрабатывает это путем тестирования, если скаляр был «строковой» или нет, я думаю, это очень здорово. Но я не могу найти способ сделать этот тест самостоятельно, не написав XS, которого я бы предпочел избежать. Это возможно? Я не могу найти это нигде в CPAN, не найдя обширного педантизма о Scalar :: Util :: looks_like_number и т. Д., Который полностью не то, что я хочу. Единственная остановка, которую я могу найти, это Devel :: Peek, которая чувствует зло. А также, как и JSON :: XS, я в порядке с этим secenario:
my $a = 5;
print $a."\n";
# now $a outputs "5" instead of 5)
Это не имеет никакого отношения к типу SV. Это связано с флагом pPOK. – ikegami
Например, посмотрите на 'my $ x =" "; $ Х = 5; my $ y = 5; "" $ У;. '. Оба являются PVIV, но только один является «волокнистым». – ikegami
Я тоже это заметил. Было бы неплохо, если бы B фактически перечислил то, что он предоставил! К сожалению, похоже, что 'SvGETMAGIC' недоступен. – ikegami