Почему в Perl появляется предупреждение «Нечетное количество элементов в анонимном хэше»? - PullRequest
6 голосов
/ 30 августа 2009

Помогите, я пытаюсь создать новую запись в своем блоге WordPress с настраиваемыми полями, используя следующий скрипт на Perl, используя metaweblogAPI поверх XMLRPC, но, похоже, проблема с настраиваемыми полями. Похоже, что публикуется только второе настраиваемое поле (ширина). Невозможно получить "высоту" для публикации должным образом. Когда я добавляю другое поле, я получаю ошибку «Нечетное количество элементов в анонимном хэше». Это должно быть что-то простое - кто-то любезно проверит мой синтаксис? Спасибо.

#!/usr/bin/perl -w
use strict;
use RPC::XML::Client;
use Data::Dumper;

my $cli=RPC::XML::Client->new('http://www.sitename.com/wp/xmlrpc.php');

my $appkey="perl"; # doesn't matter
my $blogid=1; # doesn't matter (except blogfarm)

my $username="Jim";
my $passwd='_____';

my $text=<<'END';

This is the post content...

You can also include html tags...

See you!
END

my $publish=0; # set to 1 to publish, 0 to put post in drafts

my $resp=$cli->send_request('metaWeblog.newPost',
$blogid,
$username,
$passwd,
{
  'title'       => "this is doodoo",
  'description' => $text,
  'custom_fields' => {
    { "key" => "height", "value" => 500 },
    { "key" => "width", "value" => 750 }
  },
},
$publish);

exit 0;

1 Ответ

13 голосов
/ 30 августа 2009

Хотя технически правильный синтаксис, он не делает то, что вы думаете.

'custom_fields' => {
    { "key" => "height", "value" => 500 },
    { "key" => "width", "value" => 750 }
},

примерно эквивалентно чему-то вроде:

'custom_fields' => {
    'HASH(0x881a168)' => { "key" => "width", "value" => 750 }
},

что, конечно, не то, что вы хотите. (Часть 0x881a168 будет отличаться; на самом деле это адрес, где хранится хэш-ссылка.)

Я не уверен, каков правильный синтаксис для пользовательских полей. Вы можете попробовать

'custom_fields' => [
    { "key" => "height", "value" => 500 },
    { "key" => "width", "value" => 750 }
],

, который установит custom_fields в массив хэшей. Но это может быть не так. Это зависит от того, что ожидает send_request.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...