The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

CSV

read CSV

write CSV

    use Text::CSV_XS qw[];

    Text::CSV_XS::csv(
        in          => Array[HashRef],
        out         => 'filename.csv',
        headers     => [qw[field1 field2 ...]],
        binary      => 1,
        encoding    => 'UTF-8',
        decode_utf8 => 0,
        eol         => $LF,
    );

PostgreSQL

uuid

https://www.postgresql.org/docs/current/static/uuid-ossp.html

    CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

    # use UUID v1 - based on MAC addr.
    "id" UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v1()

    CREATE EXTENSION IF NOT EXISTS "pgcrypto";

    # use UUID v5 - random
    "id" UUID PRIMARY KEY NOT NULL DEFAULT gen_random_uuid()

MySQL

connect

    my $dbh = DBI->connect(
        qq[DBI:mysql:database=$self->{cfg}->{MYSQL}->{db};host=$self->{cfg}->{MYSQL}->{host};port=$self->{cfg}->{MYSQL}->{port}],
        $self->{cfg}->{MYSQL}->{username},
        $self->{cfg}->{MYSQL}->{password},
        {   RaiseError             => 1,
            PrintWarn              => 0,
            ShowErrorStatement     => 1,
            mysql_auto_reconnect   => 1,
            mysql_enable_utf8mb4   => 1,
            mysql_multi_statements => 1,
        }
    );

create table

    CREATE TABLE IF NOT EXISTS `table` (
        `id` VARCHAR(20) NOT NULL,
        PRIMARY KEY (`player_id`)
    ) DEFAULT CHARSET=utf8mb4;

SQLite

field with the current unix timestamp by default

    "unix_timestamp" INTEGER NOT NULL DEFAULT(CAST(STRFTIME('%s', 'now') AS INT))

Other

perl tail recursion

    @_ = ($arg1, $arg2, ...);

    goto &method;