in reply to Re^2: Use of uninitialized value $pic
in thread Use of uninitialized value $pic

Yes, because it was in double quotes, so it was a valid string. You don't need the quote though, $snapshot->url( $IPCamera{$key} ); does pretty much the same thing. One difference is that if you forget the $ outside of a string, it is not valid code anymore. The double quotes also mean that perl turns $IPCamera{$key} into a string before using it as a parameter for url(). But I'm pretty sure that your url already is a string to begin with, so stringifying it is not necessary.