Как получить имя пользователя с помощью набора инструментов Perl - PullRequest
0 голосов
/ 10 ноября 2011

У меня проблема с получением имени пользователя системы Windows. Я попытался использовать функцию getlogin в Perl и распечатать ее, печатая мое имя пользователя, но моя проблема в том, как мне получить доступ к этому имени пользователя в шаблонах инструментов. Я пробовал вот так

 #!/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, он печатает имя пользователя на консоли, поэтому я допустил ошибку при доступе к переменной username в процессе шаблона. подскажите, пожалуйста, как использовать эту переменную username в шаблоне, как напечатать ее в pdf.

моя вторая проблема

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

в приведенной выше строке заголовок документа написан в процессе шаблона, мне нужно получить доступ к заголовку из кода Perl, как это сделать. Может ли кто-нибудь мне помочь, потому что это мой первый раз, используя процесс шаблона.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Посмотрите документацию API для подпрограммы процесса здесь . Как видите, второй аргумент - это ссылка на хеш. Все, что вам нужно сделать, это добавить имя пользователя, заголовок документа и data.xml в этот хеш.

0 голосов
/ 10 ноября 2011

С хеш-рефом, который вы передаете шаблону (например, $data), вам необходимо включить все переменные, которые вы используете в своем шаблоне.Переменные в вашем шаблоне должны иметь соответствующий ключ в hashref со значением, которое вы хотите использовать.

То же самое для username:

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

Аналогично для doctitle, вы можете установить его в своем Perl-коде (и таким образом иметь возможность доступа к нему):

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

... и использовать его в своем шаблоне:

\doctitle{[% doctitle %]}
...