make 还是 perl的问题?

make 还是 perl的问题?

perl -lne '/^\s*#\s*include\s+(\w+)/ and $$features{$$1}=1; END {print for sort keys %features}' $< > $@

这是makefile里的一行命令,将一个c头文件里的define都打印出来。谁能解释解释两个问题
1 为什么$features $1需要两个$$
2 那句打印是怎么工作的

我将这一句单独拿到shell里执行是不工作的,要拿掉一个$才行。谁能讲讲?多谢多谢。
是不是$$中一个引导变量一个做分割符啊?