2009-08-10 1 views
0

Все,Почему мой формат Perl не работает?

Я пытаюсь получить код внизу, чтобы выглядеть как чек. Не могли бы вы помочь мне устранить неполадки?

Спасибо, Frank

format STDOUT = 
    @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    $chkno       $chkno             
    $first       $last       
    $addr[0]              
    $addr[1]              
    $phone       $date   

    Pay to the              
    Order of: $payee    $amount   

    For: $memo      Stamped Signature  

nova> perl proj3_3.pl 
Use of comma-less variable list is deprecated at proj3_3.pl line 48. 
Name "main::date" used only once: possible typo at proj3_3.pl line 24. 
Name "main::last" used only once: possible typo at proj3_3.pl line 12. 
Name "main::payee" used only once: possible typo at proj3_3.pl line 27. 
Name "main::phone" used only once: possible typo at proj3_3.pl line 21. 
Name "main::amount" used only once: possible typo at proj3_3.pl line 30. 
Name "main::first" used only once: possible typo at proj3_3.pl line 9. 
Name "main::memo" used only once: possible typo at proj3_3.pl line 33. 
What is your Check Number? asdf 
What is your First Name? asdf 
What is your Last Name? adsf 
What is your street address (i.e. 555 Anywhere St.)? asdf 
What is your city, state, zip code (i.e. Los Angeles, CA, 90210)? as 
What is your Phone Number? df 
What is the Date? asdf 
Who is the Payee? asd 
What is the Check Amount? fa 
What is the Check's Purpose (MEMO)? sdf 
     asdf              asdf 
     $first       $last 
     $addr[0] 
     $addr[1] 
     $phone       $date 

     Pay to the 
     Order of: $payee       $amount 

     For: $memo      Stamped Signature 
     . 


format STDOUT_TOP = 
-------------------------------------------------------------- 

Редактировать ... К сожалению, новичок в этом. Вот мой код:

#!/usr/bin/perl -w 

use FileHandle 

print "What is your Check Number? "; 
chomp($chkno = <STDIN>); 

print "What is your First Name? "; 
chomp($first = <STDIN>); 

print "What is your Last Name? "; 
chomp($last = <STDIN>); 

print "What is your street address (i.e. 555 Anywhere St.)? "; 
chomp($addr[0] = <STDIN>); 

print "What is your city, state, zip code (i.e. Los Angeles, CA, 90210)? "; 
chomp($addr[1] = <STDIN>); 

print "What is your Phone Number? "; 
chomp($phone = <STDIN>); 

print "What is the Date? "; 
chomp($date = <STDIN>); 

print "Who is the Payee? "; 
chomp($payee = <STDIN>); 

print "What is the Check Amount? "; 
chomp($amount = <STDIN>); 

print "What is the Check's Purpose (MEMO)? "; 
chomp($memo = <STDIN>); 

#print "? "; 
#chomp($ = <STDIN>); 
#print "? "; 
#chomp($ = <STDIN>); 

# @>>>> right-justified 
# @|||| centered 
# @####.## numeric field holder 
# @* multiline field holder 

# now this line format will automatically apply to CHECK 
format STDOUT = 
    @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    $chkno       $chkno             
    $first       $last       
    $addr[0]              
    $addr[1]              
    $phone       $date   

    Pay to the              
    Order of: $payee    $amount   

    For: $memo      Stamped Signature   
    . 


# and this page header format will automatically apply to CHECK 
format STDOUT_TOP = 
-------------------------------------------------------------- 
. 

write STDOUT; #send to the output 
+1

Ни в коем случае не знаешь, что происходит не так, без раздела ввода. – chaos

+0

Нам нужно увидеть больше кода, чем вы показываете. –

+1

формат похож, полностью устарел. Избегайте. – jrockway

ответ

4

форматы состоят из формата строки следуют переменные, которые идут в этой строке (разделенные запятой):

#!/usr/bin/perl 

use strict; 
use warnings; 

our $first  = "Chas."; 
our $last  = "Owens"; 
our $chkno  = "123456"; 
our @addr  = ("123 Nowhere Lane", "Citysville, Townshire, 12345"); 
our $phone  = "123-456-7890"; 
our $date  = "2009-08-10"; 
our $payee  = "Stack Overflow"; 
our $amount  = "0.02"; 
our $amount_str = "no dollars and two cents"; 
our $memo  = "my two cents worth"; 

write;  

format STDOUT = 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
$first,  $last,    $chkno 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
$addr[0] 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  Date: 
$addr[1] 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<< 
$phone,         $date 

Pay to the 
Order of: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @#######.## 
      $payee,         $amount 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< dollars 
$amount_str 
             Signature 
Memo: @<<<<<<<<<<<<<<<<<<<<<<<<<<<  _________________________   
     $memo 
. 

Тем не менее, форматы имеют некоторые действительно плохие недостатки, и вы должны действительно используют другое решение. Другой вариант - использовать Perl6::Form. Это обратная сторона проекта форматов для Perl 6:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Perl6::Form; 

my $first  = "Chas."; 
my $last  = "Owens"; 
my $chkno  = "123456"; 
my @addr  = ("123 Nowhere Lane", "Citysville, Townshire, 12345"); 
my $phone  = "123-456-7890"; 
my $date  = "2009-08-10"; 
my $payee  = "Stack Overflow"; 
my $amount  = "0.02"; 
my $amount_str = "no dollars and two cents"; 
my $memo  = "my two cents worth"; 

print form 
"{<<<<<<<<<<<<<} {<<<<<<<<<<<<<<<<} {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}", 
$first,  $last,    $chkno, 
"{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}", 
$addr[0], 
"{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}  Date:", 
$addr[1], 
"{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}  {<<<<<<<<<<<<<<<<<<<<<<<}", 
$phone,         $date, 
"", 
"Pay to the", 
'Order of: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} ${>>>>>>>.<<}', 
      $payee,          $amount, 
"{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} dollars", 
$amount_str, 
"          Signature", 
"Memo: {<<<<<<<<<<<<<<<<<<<<<<<<<<<}  _________________________", 
     $memo; 
+0

Эй, ты тоже * из города Ситивилл, городшир? Как это происходит, сосед? –

+0

Chas, Вы были большой! Вы можете помочь мне добавить вход пользователя? Учреждение попросило следующее: Напишите программу, которая будет генерировать чек. Проверка должна быть напечатана на экране, как она отображается во вложенном файле (check.txt). Ваша программа должна предложить пользователю ввести информацию ниже. Назначьте данные пользователя скалярным и переменным массива, представленным ниже. Вы должны использовать форматы для печати проверки по мере ее появления, которая включает поле строки, в котором находятся элементы проверки. – 2009-08-10 05:24:46

+2

@Frank, который звучит подозрительно, как домашнее задание или вопрос интервью. Я бы предложил прочитать документацию формата (см. Ссылку в ответе или 'perldoc perlform'). –