I am not able to reproduce your results. When I run your script it outputs in the correct order. When I change the case of the names the output changes as expected.
my %meta = (
"Author"=>"J K Rolling",
"title","Harry Potter and the Philosopher's Stone"
);
Sorts: Author, title
<meta content="J K Rolling" name="Author" />
<meta content="Harry Potter and the Philosopher's Stone" name="title"
+/>
my %meta = (
"author"=>"J K Rolling",
"Title","Harry Potter and the Philosopher's Stone"
);
Sorts: Title, author
<meta content="Harry Potter and the Philosopher's Stone" name="Title"
+/>
<meta content="J K Rolling" name="author" />
If I use an Array of Arrays to ensure the correct order I also get expected results:
my @meta = (
["Author"=>"J K Rolling"],
["title","Harry Potter and the Philosopher's Stone"]
);
Sorts: Author, title
<meta content="J K Rolling" name="Author" />
<meta content="Harry Potter and the Philosopher's Stone" name="title"
+/>
my @meta = (
["author"=>"J K Rolling"],
["Title","Harry Potter and the Philosopher's Stone"]
);
Sorts: author, Title
<meta content="J K Rolling" name="author" />
<meta content="Harry Potter and the Philosopher's Stone" name="Title"
+/>
The docs state that
push_content "adds the specified items to the end of the content list of the element". Nothing about sorting, and in your case the element is the head. There is also an
unshift_content.
I used this loop for the AoA:
for my $m ( @meta ) {
my $m_el = HTML::Element->new('meta');
$m_el->attr('name',$m->[0]);
$m_el->attr('content',$m->[1]);
$head->push_content($m_el);
}