Perl 6中print、put与say函数的区别是什么?
Perl 6 中 print、put 和 say 的区别
嘿,这个问题问得太戳痛点了——很多刚上手Perl 6的开发者都会被这三个输出函数搞混,尤其是put 5和say 5看起来简直一模一样。我来给你把它们的差异拆解明明白白:
核心差异逐个说
print:完全“原汁原味”的输出
这个函数是最直白的,它会把你传入的内容直接打印出来,不会自动添加任何换行符。比如你写print 5,输出就是5(后面没有换行);如果连续执行print 5; print 6,结果会是56连在一起,没有分隔。另外,如果你传入的是非字符串类型(比如数字、自定义对象),它会调用该类型的Str方法把内容转换成字符串再输出。put:带换行的“友好调试输出”put会在输出内容的末尾自动添加一个适配当前操作系统的换行符(Windows是\r\n,类Unix系统是\n)。但它的核心特点是:输出的是内容的**“gist表示”**——也就是调用对象的gist方法返回的结果,这个方法的设计目的是给出对象的“简洁友好描述”,方便调试。对于像数字5这种简单类型,gist和Str的返回结果完全一致,所以你会觉得put 5和say 5没区别,但换成复杂对象就不一样了。say:带换行的“字符串化输出”say同样会自动加换行,但它输出的是内容的**“字符串化形式”**——也就是调用对象的Str方法的结果,这个方法返回的是对象的纯字符串表示,更适合用来展示给用户看。
用例子直观区分put和say
刚才说过,简单类型看不出差异,但复杂类型一对比就清楚了:
my $array = [1, 2, 3]; put $array; # 输出:[1 2 3](带方括号的数组友好表示) say $array; # 输出:1 2 3(纯字符串化的数组元素)
再比如自定义对象:
class Person { has $.name; method Str { return "Name: $!name" } method gist { return "Person object: $!name" } } my $p = Person.new(name => "Alice"); put $p; # 输出:Person object: Alice say $p; # 输出:Name: Alice
总结适用场景
- 用
print:当你需要精确控制输出格式,不想自动换行的时候(比如拼接多个内容到同一行) - 用
put:调试代码时,想快速看到对象的友好描述 - 用
say:输出最终要展示给用户的文本内容,需要纯字符串形式
内容的提问来源于stack exchange,提问作者Stefanus
相关产品推荐
相关产品推荐

