NAME

Mojo::Util - Portable utility functions

SYNOPSIS

use Mojo::Util qw(b64_encode url_escape url_unescape);

my $str = 'test=23';
my $escaped = url_escape $str;
say url_unescape $escaped;
say b64_encode $escaped, '';

DESCRIPTION

Mojo::Util provides portable utility functions for Mojo.

FUNCTIONS

Mojo::Util implements the following functions, which can be imported individually.

b64_decode

my $bytes = b64_decode $b64;

Base64 decode bytes.

b64_encode

my $b64 = b64_encode $bytes;
my $b64 = b64_encode $bytes, "\n";

Base64 encode bytes, the line ending defaults to a newline.

camelize

my $camelcase = camelize $snakecase;

Convert snake_case string to CamelCase and replace - with ::.

# "FooBar"
camelize 'foo_bar';

# "FooBar::Baz"
camelize 'foo_bar-baz';

# "FooBar::Baz"
camelize 'FooBar::Baz';

class_to_file

my $file = class_to_file 'Foo::Bar';

Convert a class name to a file.

# "foo_bar"
class_to_file 'Foo::Bar';

# "foobar"
class_to_file 'FOO::Bar';

# "foo_bar"
class_to_file 'FooBar';

# "foobar"
class_to_file 'FOOBar';

class_to_path

my $path = class_to_path 'Foo::Bar';

Convert class name to path.

# "Foo/Bar.pm"
class_to_path 'Foo::Bar';

# "FooBar.pm"
class_to_path 'FooBar';

decamelize

my $snakecase = decamelize $camelcase;

Convert CamelCase string to snake_case and replace :: with -.

# "foo_bar"
decamelize 'FooBar';

# "foo_bar-baz"
decamelize 'FooBar::Baz';

# "foo_bar-baz"
decamelize 'foo_bar-baz';

decode

my $chars = decode 'UTF-8', $bytes;

Decode bytes to characters and return undef if decoding failed.

deprecated

deprecated 'foo is DEPRECATED in favor of bar';

Warn about deprecated feature from perspective of caller. You can also set the MOJO_FATAL_DEPRECATIONS environment variable to make them die instead.

dumper

my $perl = dumper {some => 'data'};

Dump a Perl data structure with Data::Dumper.

encode

my $bytes = encode 'UTF-8', $chars;

Encode characters to bytes.

get_line

my $line = get_line \$str;

Extract whole line from string or return undef. Lines are expected to end with 0x0d 0x0a or 0x0a.

hmac_sha1_sum

my $checksum = hmac_sha1_sum $bytes, 'passw0rd';

Generate HMAC-SHA1 checksum for bytes.

html_unescape

my $str = html_unescape $escaped;

Unescape all HTML entities in string.

md5_bytes

my $checksum = md5_bytes $bytes;

Generate binary MD5 checksum for bytes.

md5_sum

my $checksum = md5_sum $bytes;

Generate MD5 checksum for bytes.

monkey_patch

monkey_patch $package, foo => sub {...};
monkey_patch $package, foo => sub {...}, bar => sub {...};

Monkey patch functions into package.

monkey_patch 'MyApp',
  one   => sub { say 'One!' },
  two   => sub { say 'Two!' },
  three => sub { say 'Three!' };

punycode_decode

my $str = punycode_decode $punycode;

Punycode decode string as described in RFC 3492.

punycode_encode

my $punycode = punycode_encode $str;

Punycode encode string as described in RFC 3492.

quote

my $quoted = quote $str;

Quote string.

secure_compare

my $bool = secure_compare $str1, $str2;

Constant time comparison algorithm to prevent timing attacks.

sha1_bytes

my $checksum = sha1_bytes $bytes;

Generate binary SHA1 checksum for bytes.

sha1_sum

my $checksum = sha1_sum $bytes;

Generate SHA1 checksum for bytes.

slurp

my $bytes = slurp '/etc/passwd';

Read all data at once from file.

split_header

my $tree = split_header 'foo="bar baz"; test=123, yada';

Split HTTP header value.

# "one"
split_header('one; two="three four", five=six')->[0][0];

# "three four"
split_header('one; two="three four", five=six')->[0][3];

# "five"
split_header('one; two="three four", five=six')->[1][0];

spurt

$bytes = spurt $bytes, '/etc/passwd';

Write all data at once to file.

squish

my $squished = squish $str;

Trim whitespace characters from both ends of string and then change all consecutive groups of whitespace into one space each.

steady_time

my $time = steady_time;

High resolution time, resilient to time jumps if a monotonic clock is available through Time::HiRes.

tablify

my $table = tablify [['foo', 'bar'], ['baz', 'yada']];

Row-oriented generator for text tables.

# "foo   bar\nyada  yada\nbaz   yada\n"
tablify [['foo', 'bar'], ['yada', 'yada'], ['baz', 'yada']];

trim

my $trimmed = trim $str;

Trim whitespace characters from both ends of string.

unindent

my $unindented = unindent $str;

Unindent multiline string.

unquote

my $str = unquote $quoted;

Unquote string.

url_escape

my $escaped = url_escape $str;
my $escaped = url_escape $str, '^A-Za-z0-9\-._~';

Percent encode unsafe characters in string as described in RFC 3986, the pattern used defaults to ^A-Za-z0-9\-._~.

url_unescape

my $str = url_unescape $escaped;

Decode percent encoded characters in string as described in RFC 3986.

xml_escape

my $escaped = xml_escape $str;

Escape unsafe characters &, <, >, " and ' in string.

xor_encode

my $encoded = xor_encode $str, $key;

XOR encode string with variable length key.

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.