Latest web development tutorials

Perl saída formatada

Perl é uma linguagem de dados de processamento de texto muito poderoso.

Perl pode ser usado para definir o formato do modelo e, em seguida, usar a saída de dados escrita pelo modelo especificado.

formato Perl sintaxe definida é a seguinte:

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

parâmetros analíticos:

  • FormatName: nome do formato.
  • Fieldline: um formato de linha, o formato usado para definir uma linha de saída, semelhante ao @, ^, <,>, | tais personagens.
  • value_one, value_two ......: linhas de dados, usados para inserir valores para o formato de linha de frente, todas as variáveis do Perl.
  • : Símbolo End.

O seguinte é um exemplo simples é formatado:

#!/usr/bin/perl

$text = "google w3big taobao";
format STDOUT =
first: ^<<<<<  # 左边对齐,字符长度为6
    $text
second: ^<<<<< # 左边对齐,字符长度为6
    $text
third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断
    $text  
.
write

Execute o exemplo acima saída é:

first: google
second: w3big
third: taoba

linha Format (linha gráfica) sintaxe

  • linhas de formato @ ou ^ no início, estas linhas não sejam objecto de qualquer forma de substituição de variáveis.
  • O campo @ (não ser confundido com o marcador de matriz @) é um campo comum.
  • @, <,>, ^ Após o | comprimento determina o comprimento do campo Se a variável excede o comprimento definido, ela irá ser truncado.
  • <,>, | Também representam, alinhado à esquerda, alinhado à direita, centro alinhados.
  • ^ Os campos de multi-linha bloco de texto de enchimento.

Faixa Format

Variedade de formatos, como se segue:

formato Significado gama
@ <<< saída esquerda
@ >>> saída justificado à direita
@ ||| alinhar saída
@ ##. ## número de precisão fixa
@ * Várias linhas de texto

O primeiro caractere de cada linha é uma linha de caracteres de enchimento quando se utiliza o caractere @, não a formatação do texto.

Na tabela acima, além de multi-linha @ * gama, de grande área é igual a um número especificado de caracteres no caracter @, incluindo, por exemplo:

@###.##

Ela representa sete caracteres de largura, depois de quatro antes do ponto decimal, o ponto decimal dois.

Exemplos são os seguintes:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
	$name = $_;
	$age = $a[$i];
	$salary = $s[$i++];
	write;
}

O exemplo acima saída é:

===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

formato variável

  • $ ~ ($ FORMAT_NAME): Formato de nome $ ^ ($ FORMAT_TOP_NAME): O nome do formato atual é armazenada no cabeçalho
  • $% ($ FORMAT_PAGE_NUMBER): o número da página corrente de saída
  • $ = ($ FORMAT_LINES_PER_PAGE): o número de linhas na página
  • $ | ($ FORMAT_AUTOFLUSH): se a liberar automaticamente a memória buffer de saída
  • $ ^ L ($ FORMAT_FORMFEED): em cada página (exceto a primeira página) cabeçalho necessária antes que a cadeia de saída é armazenado em

O que se segue é um simples de usar $ instance - formato:

#!/usr/bin/perl

$~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
write;           # 输出 $~ 所指定的格式

format MYFORMAT = # 定义格式 MYFORMAT 
=================================
      Text # 本教程
=================================
.
write; 

Execute o exemplo acima saída é:

=================================
      Text # 本教程
=================================
=================================
      Text # 本教程
=================================

Se você não especificar o $ ~ sob o caso, o formato de saída chamado STDOUT:

#!/usr/bin/perl

write;         # 不指定$~的情况下会寻找名为STDOUT的格式

format STDOUT =
~用~号指定的文字不会被输出
----------------
  STDOUT格式
----------------
.

Execute o exemplo acima saída é:

----------------
  STDOUT格式
----------------

O exemplo a seguir nós adicionamos uma informação de cabeçalho do relatório para demonstrar as variáveis ​​$ ^ ou US $ FORMAT_TOP_NAME:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

O exemplo acima saída é:

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Nós também pode usar o $% ou US $ FORMAT_PAGE_NUMBER pagination set para o relatório:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

# 添加分页 $% 
format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
=================================== 
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

O exemplo acima saída é:

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Saída para outro arquivo

Por padrão, a função irá escrever os resultados para o STDOUT arquivo de saída padrão, nós também podemos fazer isso gera o resultado para qualquer outro arquivo. A maneira mais fácil é para o arquivo variável como um parâmetro para escrever, tais como:

write(MYFILE);

Escrever o código acima para usar o formato de saída de impressão padrão para um arquivo chamado MYFILE MYFILE in.

Mas isso não pode ser usada para alterar o formato de impressão utilizados pelo variável $ ~. variáveis ​​do sistema $ ~ variável funciona somente para o arquivo padrão, podemos mudar a variável $ default do ~ alterações, em seguida, chamar de gravação.

#!/usr/bin/perl

if (open(MYFILE, ">tmp")) {
$~ = "MYFORMAT";
write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。

format MYFILE = # 与文件变量同名 
=================================
      输入到文件中
=================================
.
close MYFILE;
}

Após a implementação bem-sucedida, podemos ver o conteúdo do arquivo tmp, como segue:

$ cat tmp 
=================================
      输入到文件中
=================================

Podemos usar a seleção para alterar a variável de arquivo padrão, que retorna a variável interna atual indica o arquivo padrão, de modo que podemos criar um subprograma, de acordo com a sua própria produção ideias, sem afetar o resto do programa.

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {
select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中
$~ = "OTHER";
write;           # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER

format OTHER =
=================================
  使用定义的格式输入到文件中
=================================
. 
close MYFILE;
}

Após a implementação bem-sucedida, podemos ver o conteúdo do arquivo tmp, como segue:

$ cat tmp 
=================================
      输入到文件中
=================================
=================================
  使用定义的格式输入到文件中
=================================