Search code examples
perltemplate-toolkit

how to get username using perl template toolkit


I have problem with getting username form windows system. I tried using getlogin function in perl and printing it printing my user name , but my problem is how can I access this username in template toolkit. I tried like this

 #!/usr/bin/perl
 use warnings;
 use strict;
 use Data::Dumper; 
   use XML::Simple;
 use Template;
  my $username = getlogin || getpwuid($<) || "veeru";

   my $xml = new XML::Simple;
my $data = $xml->XMLin("data.xml", ForceArray=>['dat','employee','experience']);
  print $username;

 my $template = Template->new();
my $filename = 'output1.tex';
  $template->process(\*DATA, $data, $filename)
|| die "Template process failed: ", $template->error(), "\n";

system( "pdflatex $filename" );
  __DATA__
 \documentclass[a4paper,leqno,twoside]{article}
 \usepackage[latin1]{inputenc}
 \usepackage[english]{babel}
 \begin{document}

 Issued by {Name}
 \issuedby{ [% username %] }

 % Document title. Use \doctitleShort{} to insert a shorter title in the header.
 \doctitle{employee information of thie"scr"company}
 \doctitleShort{\@doctitle}

[% FOREACH comp IN company %]
[% comp.name %] 
[% comp.location%]
employeedata:
[% FOREACH employee IN comp.domain.java.employee %]

[% employee.name %][% employee.number %]

[% FOREACH obj IN data%]

[% FOREACH beha IN obj.employee %]

[% IF beha.number == employee.number && beha.name == employee.name %] 

 [% beha.address %],

  [% LAST %]
 [% END %]
   [% END %]
 [% END %]
 [% END %]
 [% END %]
  [% END %]
 \end{document}

but its not printing username in pdf , it printing username on console, so I did mistake in accessing username variable in template process. please tell me how to use that username variable in template, how to print that in pdf.

my second problem is

\doctitle{employee information of thie"scr"company}

in the above line document title is written in template process, I need to access title from perl code how to do this.can any one help me because this my first time using template process.


Solution

  • With the hashref that you pass to the template (i.e. $data), you need to include any variables that you use in your template. The variables in your template must have a corresponding key in the hashref with the value that you want to use.

    So for username:

    $data->{username} = $username;
    $template->process(\*DATA, $data, $filename);
    

    Similarly, for the doctitle, you can set it in your perl code (and thus be able to access it):

    $data->{doctitle} = 'employee information of thie"scr"company';
    

    ...and use it in your template:

    \doctitle{[% doctitle %]}