perl的输出:print、say和printf

print、printf和say

print、printf和say都可以输出信息。print和say类似,print不自带换行符,say自带换行符,但要使用say,必须写use语句use 5.010;,printf像C语言的printf一样,可以定制输出格式,不过我这perl似乎不支持printf,一用就报错,不知道为什么。它们有返回值:如果输出成功,就返回1。

注意perl中有上下文的概念,这几个输出操作也同样有上下文环境。

@arr=qw(hello world);
print "hello world","\n";   # 列表上下文
print "hello world\n";      # 标量上下文
print @arr;            # 输出helloworld(没空格)
print "@arr";          # 输出hello world(有空格)
use 5.010;
say "hello world!";  # 自带换行符

这些本没有什么可解释的,但是print/say可以以函数格式(print(args)/say(args))进行输出,这时候有个陷阱需要注意。

print(3+4)*4;

这个反返回7,而不是28。这是怎么计算的?

Perl中很多时候是可以省略括号的,这往往让我们忘记括号的归属。而Perl中又有上下文的概念,在不同上下文执行同一个操作的结果是不一样的。在这里:

  • print不加括号的时候,它需求的参数是一个列表上下文,它后面的所有内容都会被print输出
  • print加括号的时候,它只会输出括号中的内容

所以,上面的语句等价于:

(print(3+4))*4

它先执行print(7),然后拿到print的返回值1,将其乘以4,由于没有赋值给其它变量,所以这个乘法的结果被丢弃。

如果将上面赋值给一个变量:

$num = print(3+4)*4;

$num的值将为4。

另外,由于print/say不使用括号的时候,它们会输出其后面的列表。所以有以下技巧:

  • 像cat命令一样,直接输出文件内容:print <>;
  • 像sort命令一样,排序文件内容:print sort <>;

原文地址:https://www.cnblogs.com/f-ck-need-u/p/9557517.html

时间: 2024-11-29 12:43:42

perl的输出:print、say和printf的相关文章

模拟实现printf,可以实现输出print(“sccc!\n”,”hello”,’b’,’i’,’t’);

#include<stdio.h> #include<stdarg.h> #include<stdlib.h> void print(const char *format, ...) { va_list arg; char *para = NULL; va_start(arg, format); while (*format) { switch (*format) { case's': para = va_arg(arg, char*); while (*para) {

java控制台输出print和println详解

在使用java编程的过程中,控制台输出用得不少,今天我想梳理一下,print.println.printf三者的区别. 一.print 通过System.out.print方法调用,print方法的参数有很多种:boolean.char.char[].String.int.float.double.long等. print的输出末尾不换行. 1.print(boolean b) 打印boolean类型时,输出只有true和false两种.我们查看print(boolean b)的源代码,可以看到

perl的输出缓冲

  今天写一个小脚本的时候,需要即时输出当前进度到命令行上,并即时将重要数据写入报告文件中.但是perl默认是有输出缓冲的,显示到命令行上必须以\n结尾才行,输出到文件中,回车了都不行,非得要等缓冲区满了. 代码: select( STDOUT ); $| = 1; open( REPORT, ">report.txt" ) || die "create report error: $!\n"; select( REPORT ); $| = 1; select

输出与输出:putchar() getchar() printf() scanf() puts() gets() sscanf()

C语言中基本的输入输出函数有: putchar ():把变量中的一个字符常量输出到显示器屏幕上; getchar ();从键盘上输入一个字符常量,此常量就是该函数的值; printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上; scanf ();从键盘上输入各类数据,并存放到程序变量中; puts ():把数组变量中的一个字符串常量输出到显示器屏幕上; gets ():从键盘上输入一个字符串常量并放到程序的数组中. sscanf(); 从一个字符串中提取各类数据.  putcha

Python 格式化输出print

1. 常用的格式符号 %符号使用列表: 格式符号 转换 %d 有符号十进制整数 %i 有符号十进制整数,并且可以自动将输入的八进制(或者十六进制)转换为十进制 %u 无符号十进制整数 %c 字符及其ASCII码  %s  字符串,通过str()字符串转换来格式化 %o 无符号整数(八进制) %x   无符号整数(十六进制)  %X  无符号整数(十六进制大写字符)  %e 浮点数字(科学计数法),小写e   %E 浮点数字(科学计数法,用E代替e)   %f 浮点数字(用小数点符号)  %g 浮

[python输出]print函数

# coding:utf-8 # print ('abc') # 格式化打印 # 整形# 字符串类型:  %s# 浮点类型 # 字符串变量类型的格式化  %s# name = 'zhiliao'# print('my name is %s' % name)# %表示占位 s代表字符串类型 # 整型变量的格式化       %d# age = 2147483648# print ('my age is %d' % age)# print(type(age)) # 浮点类型变量的格式化    %f#

浅析Java中print、printf、println的区别

printf主要是继承了C语言的printf的一些特性,可以进行格式化输出print就是一般的标准输出,但是不换行println和print基本没什么差别,就是最后会换行System.out.printf("the number is: d",t); 参照JAVA API的定义如下:'d' 整数 结果被格式化为十进制整数'o' 整数 结果被格式化为八进制整数'x', 'X' 整数 结果被格式化为十六进制整数'e', 'E' 浮点 结果被格式化为用计算机科学记数法表示的十进制数'f' 浮

【转】Java中print、printf、println的区别详解

Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和print基本没什么差别,就是最后会换行 System.out.printf("the number is: d",t);参照JAVA API的定义如下:'d' 整数 结果被格式化为十进制整数'o' 整数 结果被格式化为八进制整数'x', 'X' 整数 结果被格式化为十六进制整数'e', 'E

perl学习笔记四——输入与输出

读取标准输入 用<STDIN>进行标准输入:chomp($line=<STDIN>); 如果读到文件尾,行输入操作符就会返回undef.便可利用这一性质跳出循环. while(defined ($line=<STDIN>)){ print "I saw $line"; } 简写为: while(<STDIN>){ print "I saw $_ ."; } 注意:这个简写只在最早的写法中才能正常运行,如果将行输入操作符