#!/usr/bin/perl use Mojolicious::Lite -signatures; use File::Replace qw/replace3/; use Mojo::JSON qw/encode_json decode_json/; use Mojo::File; my $DATA_FILE = Mojo::File->new('/path/to/data.json'); helper defaults => sub ($c, $param) { return undef unless -e $DATA_FILE; my $defaults = decode_json( $DATA_FILE->slurp ); return $defaults->{$param}; }; get '/' => sub ($c) { $c->render(template => 'index') } => 'index'; post '/' => sub ($c) { my (undef,$outfh,$repl) = replace3($DATA_FILE); print $outfh encode_json { name => $c->param('name'), }; $repl->finish; $c->render(template => 'index', message => "Form submitted!"); } => 'submit'; app->start; __DATA__ @@ index.html.ep
<%= stash 'message' %>
% } %= form_for submit => ( method=>'post' ) => begin%= link_to Reset => 'index'
####
#!/usr/bin/perl
use warnings;
use strict;
use CGI qw/:standard/;
use File::Replace qw/replace3/;
use JSON::PP qw/encode_json decode_json/;
# NOT RECOMMENDED, use an alternative like Mojo instead!
my $DATA_FILE = '/path/to/data.json';
my $defaults = decode_json( do { open my $fh, '<', $DATA_FILE
or die "$DATA_FILE: $!"; local $/; <$fh> } );
print header;
print start_html('Hello, World!');
if ( param('Submit') ) {
my (undef,$outfh,$repl) = replace3($DATA_FILE);
print $outfh encode_json {
name => scalar param('name'),
};
$repl->finish;
print p( "Form submitted!" );
}
print start_form;
print div( label({-for=>'name'}, "Your Name"),
textfield('name', $defaults->{name}) );
print div( submit('Submit') );
print end_form;
print p( a({-href=>url(-absolute=>1)}, 'Reset') );
print end_html;