I’m using Net::Twitter to access my twitter messages. Currently direct_message() returns an array of the messages. What I found out is it’s really an array of arrays (based on the account then each individual message).
I wanted to know if anyone knows a better way to print the message id’s from the results? I only figured it was an array of an array since $msgs[0][0]{‘id’} would print out the message id. When I did data dumper it looked more like it was an array of hashes.
foreach my $msg (@{$msgs[0]})
{
print $msg->{'id'} . "\n";
}
Data::Dumper Results
$VAR1 = [
{
'sender_screen_name' => 'text',
'recipient' => {
'friends_count' => 'text',
'follow_request_sent' => 'text',
'profile_background_image_url_https' => 'text',
'profile_sidebar_fill_color' => 'text',
'profile_image_url' => 'text',
'profile_background_color' => 'text',
'notifications' => 'text',
'url' => 'text',
'id' => 'text',
'is_translator' => 'text',
'following' => 'text',
'screen_name' => 'text',
'lang' => 'text',
'location' => 'text',
'followers_count' => 'text',
'statuses_count' => 'text',
'name' => 'text',
'description' => 'text',
'favourites_count' => 'text',
'profile_background_tile' => 'text',
'listed_count' => 'text',
'contributors_enabled' => 'text',
'profile_link_color' => 'text',
'profile_image_url_https' => 'text',
'profile_sidebar_border_color' => 'text',
'created_at' => 'text',
'utc_offset' => 'text',
'verified' => 'text',
'show_all_inline_media' => 'text',
'profile_background_image_url' => 'text',
'protected' => 'text',
'default_profile' => 'text',
'id_str' => 'text',
'profile_text_color' => 'text',
'default_profile_image' => 'text',
'time_zone' => 'text',
'profile_use_background_image' => 'text',
'geo_enabled' => 'text',
},
'id_str' => 'text',
'sender_id' => 'text',
'created_at' => 'text',
'text' => 'text',
'sender' => {
'friends_count' => 'text',
'follow_request_sent' => 'text',
'profile_background_image_url_https' => 'text',
'profile_sidebar_fill_color' => 'text',
'profile_image_url' => 'text',
'profile_background_color' => 'text',
'notifications' => 'text',
'url' => 'text',
'id' => 'text',
'is_translator' => 'text',
'following' => 'text',
'screen_name' => 'text',
'lang' => 'text',
'location' => 'text',
'followers_count' => 'text',
'statuses_count' => 'text',
'name' => 'text',
'description' => 'text',
'favourites_count' => 'text',
'profile_background_tile' => 'text',
'listed_count' => 'text',
'contributors_enabled' => 'text',
'profile_banner_url' => 'text',
'profile_link_color' => 'text',
'profile_image_url_https' => 'text',
'profile_sidebar_border_color' => 'text',
'created_at' => 'text',
'utc_offset' => 'text',
'verified' => 'text',
'show_all_inline_media' => 'text',
'profile_background_image_url' => 'text',
'protected' => 'text',
'default_profile' => 'text',
'id_str' => 'text',
'profile_text_color' => 'text',
'default_profile_image' => 'text',
'time_zone' => 'text',
'profile_use_background_image' => 'text',
'geo_enabled' => 'text',
},
'recipient_screen_name' => 'text',
'id' => 'text',
'recipient_id' => 'text',
}
];
I looked at
Net::Twitterand it’s very skeletal in nature. It refers you back to the API, and pretty much leaves you at that — mainly because the APIs are constantly changing which makes it hard to produce a stable module. Most modules try to clean up the reference to a reference to an array of hash references to a hash of arrays mess, but this one doesn’t.It looks like you have to use
Data::Dumperto see what data structure is being returned, and parse it the best way you can.In situations like this, you can use the
refcommand to verify exactly what you’re looking at (if it returns a reference to a hash when you’re expecting a reference to an array, you know you might be in trouble that way). You can also take a look atNet::Twitter::Litewhich might provide a bit more support for basic object handling.