in reply to Clean way of adding values to complex data structure

No need to nest loops. The condition you mentioned can be checked without iterating through each entire hash. You still have to iterate through the array, though.
for (@$pages) { $_->{flag} = 1 if $_->{url} eq "/html/about.html"; }
If you want to get really fancy, it can be a one liner, but I think that using logical connectives (and/or) for flow control hurts readability, especially in a complex statement with modifiers.
$_->{url} eq "/html/about.html" and $_->{flag} = 1 for @$pages;