in reply to Re^4: $dbh could not be passed to function unless another variable is also passed
in thread $dbh could not be passed to function unless another variable is also passed

my $dbh = "$_[0]";

What is in $dbh and why do you force it to a string?

Also, what is the error message? It is most likely something like Can't call method prepare on DBD::foo::dbh, but telling us the exact error message helps us much better diagnose your situation.

The solution is to not quote variables when you don't need it. Remove the double quotes:

my $dbh = $_[0];

Replies are listed 'Best First'.
Re^6: $dbh could not be passed to function unless another variable is also passed
by tukusejssirs (Beadle) on Aug 08, 2019 at 14:53 UTC

    Corion: The error was Can't locate object method "prepare" via package "DBI::db=HASH(0x215bc78)" (perhaps you forgot to load "DBI::db=HASH(0x215bc78)"?)

    Fletch and Corion:

    You are right. When I removed the quotes (leaving only my $dbh = $_[0];), it works as expected.

    Anyway, what exactly does ‘The solution is to not quote variables when you don't need it.’ mean? That I should quote only strings?

    Thank you both!

      I should quote only strings?

      Yes

      Anyway, what exactly does ‘The solution is to not quote variables when you don't need it.’ mean? That I should quote only strings?
      When you put quotes around something, you turn that thing into a string. You can quote whatever you want to, but, after you quote it, it will be a string, so you should only quote things that you want to be strings.

      But you should also remember what already is a string and avoid re-quoting existing strings, partly because it's wasted keystrokes, partly because it's potentially inefficient (it's less work to just use the existing string than to change the existing string into a new string and then use the new one), and partly because there could be some edge cases where quoting the existing string might change it or otherwise break something.