我在获取用户名窗体系统时遇到问题。我尝试在perl中使用getlogin函数并打印它打印我的用户名,但我的问题是如何在模板工具箱中访问此用户名。我试过这个
#!/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}
但是它没有在pdf中打印用户名,它在控制台上打印用户名,所以我在模板进程中错误地访问了用户名变量。请告诉我如何在模板中使用该用户名变量,如何在pdf中打印。
我的第二个问题是
\doctitle{employee information of thie"scr"company}
在上面的行文档标题是在模板过程中编写的,我需要从perl代码访问标题如何做到这一点。任何人都可以帮助我,因为这是我第一次使用模板过程。
答案 0 :(得分:0)
使用传递给模板的hashref(即$data
),您需要包含在模板中使用的所有变量。模板中的变量必须在hashref中具有您想要使用的值的相应键。
所以username
:
$data->{username} = $username;
$template->process(\*DATA, $data, $filename);
同样,对于doctitle
,您可以在perl代码中设置它(从而能够访问它):
$data->{doctitle} = 'employee information of thie"scr"company';
...并在模板中使用它:
\doctitle{[% doctitle %]}
答案 1 :(得分:0)
查看流程子例程here的API文档。如您所见,第二个参数是哈希引用。您所要做的就是将用户名,文档标题和data.xml添加到该哈希。