http://www.perlmonks.org?node_id=927937


in reply to Fetched data in HTML..

The simplest (and ugliest) way is to simply print out your form with the data inserted. Something like (untested):

my $h = $sth->fetchrow_hashref; # error checking left out print <<END; <form> Username: <input name='username' value='$h->{username}' /><br /> Notes: <textarea name='notes'>$h->{notes}</textarea> <input type='submit' /> </form> END

You can clean that up somewhat by using the CGI.pm module's HTML functions, so instead of printing a chunk of HTML, you call those functions for the individual tags:

print( start_form, 'Username: ', textfield('username', $h->{username}), br, 'Notes: ', textarea('notes', $h->{notes}), submit, end_form );

The next abstraction up would be a templating system like Template::Toolkit, where you keep your HTML in a separate template file, with placeholders where you want your data inserted, then put your data in a particular variable and pass it to the template.

The next step up from that is something like Catalyst or Dancer, which will use a templating system on the output side, and also have plugins for easy access to your data on the database side.

Somewhere in the middle of these I'd put inline-coding systems like HTML::Mason, which lets you put your code in your HTML (somewhat like PHP) instead of putting your HTML in your code. This still has the problem of the two getting jumbled, though.

% my $h = $sth->fetchrow_hashref; <form> Username: <input name='username' value='<% $h->{username} %>' /><br /> Notes: <textarea name='notes'><% $h->{notes} %></textarea> <input type='submit' /> </form>

I'm probably forgetting an option or two, but which of these options you should use depends on the complexity of your project, the ratio of HTML to code (if there's very little of one or the other, having them mixed may not be a big problem), what other subsystems might be helpful to you (like the plugins available for Dancer), and personal preference.