I ran into an issue where the database user has a # character, and 
Mojo::mysql doesn't parse the uri like I expected. If I set the dsn, 
username, and password separately, it works. Should I be escaping the # in 
some way? Here's an example:

my $user = 'user';
my $pass = 'abc#def';
my $host = 'host.domain';
my $dbname = 'db';

my $mysql = Mojo::mysql->new;
my $uri = sprintf('mysql://%s:%s@%s/%s', $user, $pass, $host, $dbname);
my $parsed = $mysql->from_string($uri);
print "Given URI: $uri\n";
print "Parsed:\n";
print "  DSN: " . $mysql->dsn . "\n";
print " User: " . $mysql->username . "\n";
print " Pass: " . $mysql->password . "\n";

$mysql->dsn("dbi:mysql:dbname=$dbname;host=$host");
$mysql->username($user);
$mysql->password($pass);
print "Set manually:\n";
print "  DSN: " . $mysql->dsn . "\n";
print " User: " . $mysql->username . "\n";
print " Pass: " . $mysql->password . "\n";

produces

Use of uninitialized value in concatenation (.) or string at 
/Users/risugg/.plenv/versions/5.20.2/lib/perl5/site_perl/5.20.2/Mojo/mysql.pm 
line 57.
Given URI: mysql://user:abc#[email protected]/db
Parsed:
*  DSN: dbi:mysql:dbname=;host=user:abc*
 User: 
 Pass: 
Set manually:
*  DSN: dbi:mysql:dbname=db;host=host.domain*
 User: user
 Pass: abc#def

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to