2013-03-19 4 views
-4

У меня есть строка, как показано ниже, я хочу удалить первый {ни с чем только первый, который является началом строки. Строка отлично печатается перед заменой, но после замены ее пустой строки.Perl String Заменить?

use strict; 
use warnings; 

my $string = {"something":[{"some":"12","some":"something","data":"","data":"data2","age":"23"},{......},{.....}]} 

# the string is valid as it is json from some array function. 

print $string."\n"; #My string prints fine here 
$string = s/\{//; 

print "String after replacement".".$string." testing"; 
+4

Технически '$ string' в этом случае является хеш-ссылкой, а не строкой. – redbmk

+2

Это не ваш исходный код, потому что этот код не компилируется. Назначение '$ string' - это некорректная строка json, а последний оператор' print' содержит 5 кавычек. Не отправляйте ничего, кроме точного кода, с которым вы столкнулись. – TLP

ответ

5

Вместо того чтобы пытаться связываться вручную с JSON, я настоятельно рекомендую вам использовать существующий, проверенный, отлажена модуль JSON для чтения в формате JSON, изменять структуру данных, и записать его обратно.

См. JSON для одного модуля, который сделает это за вас.

+2

Есть https://metacpan.org/module/JSON::XS тоже, я думаю, это быстрее, чем 'JSON' –

+1

' JSON :: XS' также обрабатывает utf-8 лучше, чем 'JSON' – redbmk

2

Заменить:

$string = s/\{//; 

с:

$string =~ s/\{//; 
+0

О, человек, я трачу половину час, выясняя, что вчера ...;) – kjprice

+0

Спасибо, это сработало. Мне нужен был простой ответ. – mysteriousboy

1

Как уже говорилось ранее в потоке, другой подход заключается в использовании JSON::XS модуль, он будет быстрее чем JSON и к тому же, как redbmk сказал, он лучше обрабатывает UTF-8.

+0

Из документов 'JSON': * Этот модуль пытается использовать' JSON :: XS' по умолчанию и не работает, вместо этого используйте 'JSON :: PP'. Таким образом, его функции полностью зависят от 'JSON :: XS' или' JSON :: PP'. * –