Yesterday I made my first attempt at using any library in a Perl6
program -- specifically, DBIish.
The following succeeded in establishing a connection to a Postgresql
database named 'hierarchy' on the same disk as Perl6:
#####
$ cat dbiish_connect.pl6
#!/usr/bin/env perl6
use DBIish;
my $dbh = DBIish.connect("Pg", :database<hierarchy>);
say "Database: connection ", ($dbh.ping ?? "established" !! "not
established");
$ perl6 dbiish_connect.pl6
Database: connection established
#####
Since I have several different Postgresql databases on disk, I want to
be able to store a DB's name in a variable, then have DBIish.connect
interpolate that variable while establishing a connection. I tried:
#####
$ cat dbiish_connect_dynamic.pl6
#!/usr/bin/env perl6
use DBIish;
my $db = 'hierarchy';
my $dbh = DBIish.connect("Pg", :database<$db>);
say "Database $db: connection ", ($dbh.ping ?? "established" !! "not
established");
#####
But I only got this error output:
#####
$ perl6 dbiish_connect_dynamic.pl6
DBDish::Pg: Can't connect: FATAL: database "$db" does not exist
(1)
in block at
/home/jkeenan/rakudo-star/share/perl6/site/sources/3EA876C6AC912AF3692CEF8EEF5E9033C03F7507
(DBIish) line 41
in any at
/home/jkeenan/.perl6/precomp/D7820A4EF6D97B780F45CAC4B50C4E6E59589690.1462056119.68849/3E/3EA876C6AC912AF3692CEF8EEF5E9033C03F7507
line 1
in method connect at
/home/jkeenan/rakudo-star/share/perl6/site/sources/C2BC378F86912AB748EF3CF51FBE6E3AE0CFE0EA
(DBDish::Pg) line 79
in method connect at
/home/jkeenan/rakudo-star/share/perl6/site/sources/3EA876C6AC912AF3692CEF8EEF5E9033C03F7507
(DBIish) line 45
in block <unit> at dbiish_connect_dynamic.pl6 line 5
#####
I also tried:
#####
$ cat dbiish_connect_dynamic_2.pl6
#!/usr/bin/env perl6
use DBIish;
my $db = 'hierarchy';
my $dbh = DBIish.connect("Pg", ":database<$db>");
say "Database $db: connection ", ($dbh.ping ?? "established" !! "not
established");
#####
But that gave me a different error:
#####
$ perl6 dbiish_connect_dynamic_2.pl6
Too many positionals passed; expected 2 arguments but got 3
in method connect at
/home/jkeenan/rakudo-star/share/perl6/site/sources/3EA876C6AC912AF3692CEF8EEF5E9033C03F7507
(DBIish) line 29
in block <unit> at dbiish_connect_dynamic_2.pl6 line 5
#####
Why does variable interpolation not work here? What part is my doing
something wrong? What part is a limitation in the DBIish library?
Thank you very much.
Jim Keenan