#!/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 Hello, World! % if ( stash 'message' ) {

<%= stash 'message' %>

% } %= form_for submit => ( method=>'post' ) => begin
%= label_for name => 'Your Name' %= text_field name => defaults 'name'
%= submit_button 'Submit'
%= end

%= 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;