NAME

transerialize - transerialize files from a format to a different one

VERSION

version 1.5.1

SYNOPSIS

# simple
$ transerialize foo.yaml bar.json

# with options
$ transerialize pretty=1 foo.yaml bar.json

# reading from STDIN
$ cat foo.yaml | transerialize -.yaml bar.json

# printing to STDOUT
$ transerialize foo.yaml -.json

DESCRIPTION

transerialize is a command-line interface to the File::Serialize function of the same name.

The command behaves pretty much like its underlying function, except for the details below.

Default options

All leading arguments containing an '=' will be considered default options. In other words,

$ transerialize pretty=1 format=json foo bar

is equivalent to the script

use File::Serialize { pretty => 1, format => 'json' };

transerialize_file 'foo' => 'bar';

Code arguments

Any argument that begin with a '{', '[' or 'sub {' will be eval'ed (as opposed as being considered filenames).

Intermediary steps

Any intermediary step that doesn't look like code (as specified in the previous section) is doing to be interpreted as a Perl script returning a transformation function.

For example, you could grab the title of a blog entry and put it in the frontmatter via:

$ transerialize ./README.md ./set_front_title.pl -.json

with ./set_front_title.pl looking like:

sub {
    return $_ if $_->{title};

    $_->{title} = $1 if $_->{_content} =~ /^# (.*)/m;

    return $_;
}

Loading intermediary steps from file

Any of the argument passed to transerialize that has a leading @ is considered a serialized file containing a list of files and will be expanded. Useful if you do have a lot of intermediary steps and the command line is getting ungainly long.

For example, you could have

# file ./process_blog.yml
- set_front_title.pl
- gather_tags.pl

$ transerialize README.md @./process_blog.pl -.json

STDIN and STDOUT

An input filename which main part is a dash will be taken to be STDIN. For example

$ transerialize_file -.yaml foo.json

will read STDIN, consider it to be YAML, and then convert it to JSON.

Likewise, an output file which main part is a dash will be printed on STDOUT. For example

$ transerialize_file foo.yaml -.json

will print out the data of foo.yaml as JSON.

Accessing source and destination files

The original source and destination files are available to transformation scripts via the global variables $File::Serialize::SOURCE and $File::Serialize::DESTINATION.

AUTHOR

Yanick Champoux <yanick@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021, 2019, 2017, 2016, 2015 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.